c++ - 在大型模板参数列表的情况下方便使用宏
问题描述
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++ 很陌生 :)
解决方案
使用别名似乎更好:
template <class int_t, class float_t>
using MyShell = Shell<int_t, float_t, MyPol1, MyPol2, ..., MyPolN>;
推荐阅读
- reactjs - 如何修复 GitHub Pages 中的反应框架错误
- javascript - Jquery 在行中动态包装引导列
- python - 合并列表项python 3.6
- generics - 我可以使用通用返回类型而不必向下转换吗?
- android - AppCompatRadioButton 使用矢量资源
- outlook - 与 Outlook API 对话的我的 REST API 规范
- regex - 如何围绕某些函数调用进行查找替换
- excel - 使用对象资源管理器中定义的工作表名称和工作簿定义来设置工作表
- r - 如何在 R 中的 data.table 中替换现有映射
- r - 将大型 Excel 文件直接粘贴到 R 中(有很多列)-“扫描错误”