そうすることは可能ですか
# 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 ソリューションまたはデフォルトのテンプレート パラメータを使用してください。また、予約名は使用しないでください。