2

私は次のクラス定義を持っています:

template <typename T>
class SeqVisitor {
public: 
    typedef string* return_type;

    return_type visit(int elem) const;
    return_type visit(char elem) const;
    return_type visit(T elem) const;
};

電話を使っSeqVisitor<char>て訪問するときはあいまいです。クラス定義の外で関数を定義した場合、その関数の呼び出しはあいまいではありません。コンパイラーは、「Telem」ではなく「charelem」を含むものを選択します。同じ動作を示すようにクラス定義を修正できます。それは曖昧さを取り除くことです。

4

2 に答える 2

0

多分

return_type visit(char elem) const;
return_type visit(T elem, ...) const;
于 2012-06-07T21:00:59.427 に答える
0

あなたはすでにこれを知っていると思います.visit()をクラス外から呼び出そうとする場合、typedefはクラス内にあります。クラスのユーザーが visit() 関数を呼び出している場合、typedef をクラスの外のどこかに置かないのはなぜですか (これがあなたがやろうとしていることかどうかはわかりません)。

クラス内で typedef を試したところ、クラス外から関数を呼び出す際に問題が発生しましたが、typedef をクラス外に移動したときには問題はありませんでした。

本当にクラス内で typedef のみを使用している場合、あなたが持っているものは理にかなっています

于 2012-06-07T21:22:22.897 に答える