12

重複の可能性:
c++ で is_same_type 型特性を実装するプログラム

2 つの型名が等しいかどうかに基づいて、テンプレート関数が異なる処理を実行するようにします。

template <typename T1, typename T2> f()
{
  if (T1==T2) ...;
  else ...;
}

「if(T1==T2)」が機能しないことはわかっていますが、それを行う方法はありますか?

4

5 に答える 5

16

boost::is_sameまたはstd::is_sameC++11 で確認できます。

したがって、次のようになります。

template <typename T1, typename T2> f()
{
  if (boost::is_same<T1,T2>::value) ...;
  else ...;
}
于 2012-11-30T22:54:40.897 に答える
5
#include <type_traits>

template <typename A, typename B> void f() {

    if ( std::is_same<A, B>::value ) {

        //

    }

}

std::is_sameタイプのtypedef等式に応じてブール値(true、false)のaを返します。AB

于 2012-11-30T23:52:01.263 に答える
4

型を推測でき、明示的に渡されていない場合は、2 つの別個の関数を作成できます。

template<typename SameType>
void f(SameType x, SameType y)
{
    // ...
}

template<typename T1, typename T2>
void f(T1 x, T2 y)
{
    // ...
}
于 2012-11-30T22:55:06.780 に答える
1

テンプレートを特化する

template<typename T1, typename T2>
void f()
{
  //The else part goes here
}

template<typename T>
void f()
{
  //The if part goes here
}
于 2012-11-30T22:52:34.343 に答える
0

typeidT1を比較できます。T2

#include <typeinfo>

template <typename T1, typename T2> void f()
{
    bool a;
    if (typeid(T1) == typeid(T2))
        a = true;
    else
        a = false;
}
于 2012-11-30T22:55:35.070 に答える