2012-04-20 5 views
0

私はどのようにテンプレートの特殊化を使用するかを考えていましたが、予期しないコンパイラエラーが発生しました。文法を確認するほど、見た目が正しく見えるので、私は何かが欠けています。私がしようとしているのは、特殊化された2つの関数テンプレートを作成し、それらを過負荷関数と比較することです。次のように私が手にエラーがある:私の特殊なテンプレート関数 'OverloadedFunk'がC++で「解決できませんでした」というエラーを表示するのはなぜですか?

#include <iostream> 
using namespace std; 

enum ErrorCode { 
    ERROR_NONE = 0, ///< No errors 
    SOME_FAILURE_01, 
    SOME_FAILURE_02, 
    INVALID_STATUS, 
    ERROR_UNKNOWN, 
}; 

template<typename _to, typename _from> 
inline int OverLoadedFunk(_from const &arg, _to &dest) 
{ 
    cout << "OverLoadedFunk3 - Template to from"; 
    return 0; 
} 

template<> 
inline int OverloadedFunk(const int &from, std::string &dest) //Line 28 
{ 
    cout << "OverloadedFunk1 - int to string"; 
    return 0; 
} 

template<> 
inline int OverloadedFunk(const ErrorCode &from, std::string &dest) //Line 35 
{ 
    cout << "OverloadedFunk2 - enumeration to string"; 
    return 0; 
} 


int main() { 
    std::string localDest = "test"; 
    int localFrom = 1234; 
    OverloadedFunk(localFrom, localDest); 
    return 0; 
} 

は、私がここで間違って正確に何をしています:?ここではライン28及び35上の'OverloadedFunk' could not be resolvedは、私が岩にしようとしたコードですか私は、代わりにオーバーロードされた関数を使用することができます知っているが、私は専門化とオーバーロードされた関数の違いをテストしようとしているので、この場合私を助けません。すべての援助は非常に高く評価されます。

答えて

3

プライマリ関数テンプレートの名前はOverLoadedFunkですが、特殊化の名前はOverloadedFunk –です.C++では大文字と小文字が区別されます。

+0

テンプレートパラメータの順序は、関数パラメータの逆であることを指摘する価値があります。 vs(from、to) - エラーではなく、混乱を招く可能性があります。 – Fraser

+0

doh! (手のひらスラップ) ありがとうildjarn。 – Drellgor