【发布时间】:2017-08-18 14:00:50
【问题描述】:
我想为i = 0,1, ... , n 将大量行写入foo(i) 形式的C++ 文件中,有没有办法在编译时执行此操作?
我想这样做是因为我有一个模板类:
template <int X> class MyClass{ ... }
我想测试很多不同的“X”值,例如:
for (int i = 0; i < n; i++) {
MyClass<i> bar;
bar.method()
}
这不起作用,因为它希望在编译时确定作为模板值传递的值。
我可以写出整个事情:
MyClass<0> bar0; bar0.method();
MyClass<1> bar1; bar1.method();
我可以做一个定义来加快速度,比如:
#define myMacro(x) MyClass<x> bar_x; bar_x.method();
但我仍然必须在任何地方写myMacro,而且我会经常更改范围以使其变得明智。如果我可以编写某种 for 循环的宏版本,那会为我节省很多时间。
更新:我实际上需要将变量传递给我的方法,所以我对@Pascal 给出的接受的答案进行了轻微更改
template<int X> class MyClass { public: void foo(int Y) { std::cout << X Y<< std::endl; } };
template<int X> inline void MyTest(int Y) { MyTest<X - 1>(Y); MyClass<X-1> bar; bar.foo(Y); }
template<> inline void MyTest<1>(int Y) { MyClass<0> bar; bar.foo(Y); }
【问题讨论】:
-
您是否需要将整数值作为模板参数(在编译时确定)而不是函数参数(在运行时确定)?
-
@Peter 这是因为我正在测试代码。有机会我会重写它,使它成为一个接受运行时参数的函数,但出于外部原因,重要的是不要触及代码。
标签: c++ compilation variadic-macros