【发布时间】:2012-05-18 21:04:03
【问题描述】:
有可能吗
# define abc<T1> __abc<T1, T2>
template<typename T2> void somefun() {
...
abc<int>(...);
abc<double>(...);
...
}
只是为了不每次我调用 abc 时都写它
【问题讨论】:
有可能吗
# define abc<T1> __abc<T1, T2>
template<typename T2> void somefun() {
...
abc<int>(...);
abc<double>(...);
...
}
只是为了不每次我调用 abc 时都写它
【问题讨论】:
在 C++11 中你可以这样做:
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();
}
但老实说,它的可读性甚至不如宏案例
(注:__abc 保留)
【讨论】:
可以,但您需要使用圆括号。
# define abc(T1) __abc<T1, T2>
template<typename T2> void somefun() {
...
abc(int)(...);
abc(double)(...);
}
编辑:我的建议是根本不使用宏来表示这种缩写。使用 awoodlands 解决方案或默认模板参数。并且您不得使用保留名称。
【讨论】: