2

可能重复:
宏中使用的模板参数有问题

我试图找出一种方法来让它工作而不改变结构INHERIT

#define INHERIT(t) foo<t>
template<typename A, typename B>
struct bar : INHERIT(bar<A, B>) {};

问题是调用INHERIT包含逗号。

我正在尝试支持较旧的编译器,因此不能选择可变参数宏和模板别名。有没有什么办法解决这一问题?

4

1 回答 1

1

使用一些棘手的宏:

#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 {};
于 2012-11-03T10:58:39.363 回答