是否有可能這樣做模板在C++中的宏?
# define abc<T1> __abc<T1, T2>
template<typename T2> void somefun() {
...
abc<int>(...);
abc<double>(...);
...
}
只是爲了不每次我打電話ABC
是否有可能這樣做模板在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
保留)
我不會使用宏,完整地輸入它。它看起來不自然,當它變老時會混淆他人和你自己。此外,它存在於頭文件中,可能會導致頭部代碼出現問題。 – Beached
是的,但你需要使用圓括號。
# define abc(T1) __abc<T1, T2>
template<typename T2> void somefun() {
...
abc(int)(...);
abc(double)(...);
}
編輯:我的建議是不使用這種縮寫的宏。使用awoodlands解決方案或者可能是默認的模板參數。你不能使用保留的名字。
有趣的,它的工作原理,但使代碼棘手和難以理解,因爲它看起來像C風格鑄造:) – user1386738
你問了它,並得到它;-) – hirschhornsalz
@ user1386738:「它的工作,但使代碼棘手和難以理解「適用於大多數(如果不是全部)宏。 – MSalters
(注意'__abc是保留的) – Flexo
不要使用宏來滿足你的懶惰。他們只是讓你的程序成爲一個真正的婊子來維護。 –