1

ブースト::バリアントを使用している次の方法があります。type に基づいて値を取得しようとしますT。失敗した場合boost::get<T>、T が int または unsigned int の場合、特別な方法で処理したいと考えています。Tintかunsigned intかを知る方法はありますか?

この場合、テンプレートの特殊化は使用できないと思いますよね?

EDIT:また、私はまだC++ 11にアクセスできません(すぐに願っています)

template < typename T, typename C, void (C::*setterFcn)(const T&) >
void binder( const Variant& value_var, C* c )
{
    const T* typeData = boost::get<T>(&value_var);

    if ( NULL == typeData )
    {
        // Need to check for int or unsigned int here somehow
    }

    (((C*) c)->*(setterFcn))(*typeData);
}
4

3 に答える 3

4

C++11 では使用できstd::is_same、C++03 では次のようなことができます。

template <typename T1, typename T2>
class is_same
{
public: 
    static bool const value = false;
};

template <typename T>
class is_same<T, T>
{
public: 
    static bool const value = true;
};

C++11 標準バージョンとまったく同じように使用します。

于 2012-10-09T21:42:50.723 に答える
4

ブーストまたは C++11 で is_same() を使用することもできます。

http://www.boost.org/doc/libs/1_51_0/libs/type_traits/doc/html/boost_typetraits/reference/is_same.html

http://en.cppreference.com/w/cpp/types/is_same

于 2012-10-09T21:37:24.320 に答える
1

最も簡単な方法は、おそらくオーバーロードされた関数または関数テンプレートに委譲することです。一般的な処理を 1 つの関数で指定し、おそらく何もしないで、2 つの個別の関数 (余分な処理が些細な場合) またはenable_ifed 関数で特殊な処理を指定します。intまたはの条件チェックを使用しunsigned intます。

于 2012-10-09T21:38:13.743 に答える