4

次のような2つの機能があります

template<typename T>
unsigned int myFunction(T myelement)
{

myelement->func();

return 2;
}

void myFunction(unsigned int myelement)
{
}

そして、私は次のコードを使用しています

myFunction(2);

Visual Studio 2012 は、「int has not ->func()」と不平を言っています。unsigned int バージョンを使用しないのはなぜですか?

4

2 に答える 2

3

エラーメッセージを読み間違えています。コンパイラは関数を使用せず、インスタンス化して候補かどうかを判断します。不適切なタイプのインスタンス化を無効にする必要があります。

template<typename T>
typename std::enable_if<!std::is_fundamental<T>::value, unsigned int >::type
myFunction( T myelement )
{
    // ...
}

実際の例

于 2013-11-02T08:48:39.437 に答える
1

コーディングしてみる

myFunction(2U);

また

myFunction((unsigned)2);

リテラル2int(not unsigned int) 型です。そしてint、クラスまたは型ではありません->func()

そして、おそらくテンプレートunsigned定義する代わりに特殊化しますmyFunction(unsigned int)

于 2013-11-02T08:42:33.830 に答える