重複の可能性:
c++ で is_same_type 型特性を実装するプログラム
2 つの型名が等しいかどうかに基づいて、テンプレート関数が異なる処理を実行するようにします。
template <typename T1, typename T2> f()
{
if (T1==T2) ...;
else ...;
}
「if(T1==T2)」が機能しないことはわかっていますが、それを行う方法はありますか?
重複の可能性:
c++ で is_same_type 型特性を実装するプログラム
2 つの型名が等しいかどうかに基づいて、テンプレート関数が異なる処理を実行するようにします。
template <typename T1, typename T2> f()
{
if (T1==T2) ...;
else ...;
}
「if(T1==T2)」が機能しないことはわかっていますが、それを行う方法はありますか?
boost::is_same
またはstd::is_same
C++11 で確認できます。
したがって、次のようになります。
template <typename T1, typename T2> f()
{
if (boost::is_same<T1,T2>::value) ...;
else ...;
}
#include <type_traits>
template <typename A, typename B> void f() {
if ( std::is_same<A, B>::value ) {
//
}
}
std::is_same
タイプのtypedef
等式に応じてブール値(true、false)のaを返します。A
B
型を推測でき、明示的に渡されていない場合は、2 つの別個の関数を作成できます。
template<typename SameType>
void f(SameType x, SameType y)
{
// ...
}
template<typename T1, typename T2>
void f(T1 x, T2 y)
{
// ...
}
テンプレートを特化する
template<typename T1, typename T2>
void f()
{
//The else part goes here
}
template<typename T>
void f()
{
//The if part goes here
}
typeid
とT1
を比較できます。T2
#include <typeinfo>
template <typename T1, typename T2> void f()
{
bool a;
if (typeid(T1) == typeid(T2))
a = true;
else
a = false;
}