5

関数テンプレートと、 3つの引数を取り、それらの中で最大のものを計算して出力する、明示的に特殊化されたテンプレート関数を作成しました。

テンプレートが正常に機能するのに対し、特殊な関数がエラーを引き起こしています。しかし、 char*型で作業したいと思います。

これは私が得るエラーです=> error: template-id ‘Max<>’ for ‘void Max(char, char, char)’ does not match any template declaration

以下は私のコードです:

    template <typename T>
    void Max(T& a,T& b,T& c)
    {
            if(a > b && a >> c)
            {
                    cout << "Max: " << a << endl;
            }
            else if(b > c && b > a)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << c << endl;
            }
    }

    template <>
    void Max(char* a,char* b,char* c)
    {
            if(strcmp(a,b) > 0 )
            {
                    cout << "Max: " << a << endl;
            }
            else if(strcmp(b,c) > 0)
            {
                    cout << "Max: " << b << endl;
            }
            else
            {
                    cout << "Max: " << b << endl;
            }
}
4

2 に答える 2

7

参照によってポインタを取得する必要があります。

template <> 
void Max(char*& a,char*& b,char*& c) 

とはいえ、明示的な特殊化を使用せず、代わりに関数をオーバーロードする方がよいでしょう。

void Max(char* a, char* b, char* c)

ほとんどの場合、関数テンプレートを特殊化することはお勧めできません。詳細については、ハーブサッターの「関数テンプレートを専門にしないのはなぜですか?」を参照してください。

于 2010-10-14T15:40:12.797 に答える
4

同じ問題が発生し、typedefを使用して修正しました。

typedef char * charPtr;
template <>
void Max(charPtr &a, charPtr &b, charPtr &c)
于 2012-02-15T07:09:43.033 に答える