可能重复:
宏中使用的模板参数有问题
我试图找出一种方法来让它工作而不改变结构INHERIT
:
#define INHERIT(t) foo<t>
template<typename A, typename B>
struct bar : INHERIT(bar<A, B>) {};
问题是调用INHERIT
包含逗号。
我正在尝试支持较旧的编译器,因此不能选择可变参数宏和模板别名。有没有什么办法解决这一问题?
可能重复:
宏中使用的模板参数有问题
我试图找出一种方法来让它工作而不改变结构INHERIT
:
#define INHERIT(t) foo<t>
template<typename A, typename B>
struct bar : INHERIT(bar<A, B>) {};
问题是调用INHERIT
包含逗号。
我正在尝试支持较旧的编译器,因此不能选择可变参数宏和模板别名。有没有什么办法解决这一问题?
使用一些棘手的宏:
#define A2(t1,t2) t1,t2
#define A3(t1,t2,t3) t1,t2,t3
#define A4(t1,t2,t3,t4) t1,t2,t3,t4
#define INHERIT(t) foo< t >
template<typename A, typename B>
struct bar : INHERIT(bar<A2(A, B)>) {};
这些宏导致预处理器停止将逗号视为其语法 - 逗号开始仅被视为参数的一部分。
另一种方法:
#define bar_A_B bar<A,B>
template<typename A, typename B>
struct bar : INHERIT(bar_A_B) {};
注意
这些示例在没有以下情况下无法编译:
template <class T>
class foo {};