你能否做到这一点?
# define abc<T1> __abc<T1, T2>
template<typename T2> void somefun() {
...
abc<int>(...);
abc<double>(...);
...
}
只是为了不在每次调用abc时重复编写它
template<typename T2> void somefun() {
template <typename T>
using abc = __abc<T, T2>;
}
如果没有这个,你可以使用宏,但需要执行以下操作:
#define abc(T1) __abc<T1, T2>
//usage:
abc(Type) instance;
但是个人认为这看起来不太自然,我会避免使用。
如果你想避免在C++11之前使用宏,可以尝试以下方式:
template <typename T2>
struct type {
template <typename T1>
struct lookup {
typedef __abc<T1,T2> type;
};
};
template <typename T2> void somefun() {
typedef type<T2> abc;
typename abc::template lookup<int>::type();
}
是的,但你需要使用圆括号。
# define abc(T1) __abc<T1, T2>
template<typename T2> void somefun() {
...
abc(int)(...);
abc(double)(...);
}
编辑:我的建议是不要使用宏来进行这种缩写。可以使用awoodlands的解决方案或者默认模板参数。而且不应该使用保留名称。