2

私は明確な答えを探していました、そして私はただウェブから断片を捕らえています。

関数があり、型変数に基づいて異なる動作をする必要があります。この関数は引数を取らないため、オーバーロードは機能せず、テンプレートの特殊化につながります。例えば:

//Calls to this function would work like this:
int a = f();
int b = f<int>();
int c = f<char>();
//...

まず、構文的にも可能ですか?そんな感じです。続行します。

明示的な特殊化の構文に夢中になっているため、この関数の定義に問題があります。私はさまざまなアプローチを試しましたが、簡単な例でさえまだ機能していません。

次に、(最終的には)そのテンプレート関数を(非テンプレート)クラスのテンプレートメソッドにしようとしています。その橋に着いたら渡ります。

ありがとう、
イアン

4

2 に答える 2

3

まあ、それは可能ですが、やるべきことの一つではありません。明示的なテンプレート関数の特殊化はやや暗いコーナーですが、これを行う方法は次のとおりです。

template< typename T > int f(){ ... }

template<> int f<int>(){ ... }
template<> int f<char>(){ ... }

関連する読み物:http ://www.gotw.ca/gotw/049.htm

于 2012-05-18T01:56:17.137 に答える
2

まず、構文的にも可能ですか?そんな感じです。

それはそうですが、物事を過度に複雑にしないでください-これは単純なオーバーロードのみを必要とします:

int f()
{
    return /* default, typeless implementation */;
}

template<typename T>
int f()
{
    return /* type-specific implementation */;
}

template<>
int f<char>()
{
    return /* char implementation */;
}

template<>
int f<int>()
{
    return /* int implementation */;
}
于 2012-05-18T02:02:56.953 に答える