[英]Template in a Macros in C++?
是否可以這樣做
# 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解決方案或可能是默認模板參數。 你不應該使用保留的名字。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.