首页 > 解决方案 > 在大型模板参数列表的情况下方便使用宏

问题描述

Shell在我的设计中,我有一个针对大量参数模板化的类(让它成为)。这些参数中的大多数是我在项目中定义的其他类,因为我为我的项目选择了基于策略的设计方法。

类声明看起来像这样:

template <class int_t, class float_t, class Pol1, class Pol2,..., class PolN>
class Shell : Pol1, Pol2,...,PolN

前两个参数是应使用的整数和浮点类型。其余参数是项目中定义的特定策略。

这种设计对我来说很方便,因为它可以避免很多运行时检查(我们的目标是运行时性能)。然而,每当他/她想要创建Shell类的实例时,输入一个包含 10 多个参数的列表是非常麻烦的(从用户的角度来看)。

出于这个原因,我选择将这个打字负担连同宏一起移到一个单独的文件中。首先,我将所有策略默认为宏:

template <class int_t, class float_t, class Pol1 = DEF_1, class Pol2 = DEF_2,..., class PolN = DEF_N>
class Shell : Pol1, Pol2,...,PolN

模板参数可以在单独的文件中作为宏提供,而不是在求解器的声明中。例如:

#include <shell.cpp>

#define DEF_1 example1
#define DEF_2 example2
...
#define DEF_N exampleN

int main(){
    Shell<int,double> MyShell();
    return 0;
    }

这样,实例化类只需要传递给模板参数(其他+10参数通过宏传递)。定义甚至可以移动到单独的文件中,如下所示:

#include <shell.cpp>
#include "define.hpp"

这只是一种解决方法,因此不必在每次创建类的实例时都提供 10 多个参数的参数列表。宏是迄今为止我发现的最好的解决方案。但是,我知道宏不是大多数 C++ 应用程序中的“推荐”解决方案。

出于这个原因,我想知道这是否是一个典型的问题,以及如何在没有宏的情况下克服它。我还想知道宏是否是一个“好的”解决方案,或者我是否应该不惜一切代价避免这种设计。我将不胜感激有关此主题的任何帮助/评论,因为我对 C++ 很陌生 :)

标签: c++templatesmacrospolicy-based-design

解决方案


使用别名似乎更好:

template <class int_t, class float_t>
using MyShell = Shell<int_t, float_t, MyPol1, MyPol2, ..., MyPolN>;

推荐阅读