5

テンプレートの特殊化に関するいくつかのスライドから:

#include <iostream>

using namespace std;

template<class X> 
X& min(X& a, X& b)
{
    return a > b ? b : a;
}

int& min(int& a, int & b)
{
    // rewrite of the function in the case of int:
    cout << "int explicit function\n";
    return a > b ? b : a;
}

/* 
new syntax – the more appropriate way:
template<>
int& min<int>(int& a, int& b)
{
    cout << "int explicit function\n";
    return a > b ? b : a;
}
*/

2番目の方法がより「適切」なのはなぜですか?

4

1 に答える 1

1

オーバーロードはほとんどのコンテキストで正常に機能し、AFAIK が推奨されるベースライン アプローチです。( juanchopanzaによって提案された GOTW を参照)

誰かが明示的にテンプレートを要求し、 を呼び出すと、違いが生じmin<int>(x, y)ます。その場合、オーバーロードは無視され、テンプレート (基本または特殊化) のみが考慮されます。

于 2013-06-27T13:28:10.390 に答える