16,548
社区成员




/*
定义不同的数字可以使下面的someStruct的() 里支持不同的参数个数
比如这里定义成2,下面的Some类就相当于
struct Some {
template<typename A1, typename A2>
struct someStruct {
void operator() (A1 a1, A2 a2) const {
}
};
};
如果这里定义成3,下面的Some类就相当于
struct Some {
template<typename A1, typename A2, typename A3>
struct someStruct {
void operator() (A1 a1, A2 a2, A3 a3) const {
}
};
};
*/
#define PARAM_COUNT 2
#define COMPILE_TIME_JOIN(X, Y) X##Y
#define MAKE_PARAMS1_2(t) t##1, ##t##2
#define MAKE_PARAMS2_2(t1, t2) t1##1 t2##1, t1##2 t2##2
#define PARAMS MAKE_PARAMS2(PARAM_COUNT,A,a)
#define MAKE_PARAMS1(n, t) COMPILE_TIME_JOIN(MAKE_PARAMS1_, n) (t)
#define MAKE_PARAMS2(n, t1, t2) COMPILE_TIME_JOIN(MAKE_PARAMS2_, n) (t1, t2)
#define TEMPLATE_PARAMS MAKE_PARAMS1(2, typename A)
struct Some {
template<TEMPLATE_PARAMS>
struct someStruct {
void operator() (PARAMS) const {
}
};
};
int main() {
return 0;
}
#define MAKE_PARAMS1_2(t) t##1, ##t##2
#define MAKE_PARAMS1_2(t) t##1, t##2