は、コードを次の点を考慮C++:正しくテンプレートクラスに仮想関数をオーバーライド
template<typename T>
struct MyTempl
{
virtual void doStuff(const T &value) = 0;
};
struct MyImpl : MyTempl<int>
{
void doStuff(const int &value) {}
};
struct MyPtrImpl : MyTempl<int*>
{
void doStuff(const int* &value) {}
};
MyImpl imp1;
MyPtrImpl imp2;
これは正しくコンパイルされません。コンパイラは、MyPtrImpl
でdoStuff()
はすなわち、仮想純粋であることを私に伝えます。私はそれを正しく無視できませんでした。しかし、int*
をint_ptr
のようにタイプして、それをMyPtrImpl
のテンプレート引数として使用すると、すべてがうまくいきます。
コンパイラがtypedefなしで自分のインテントを差し引くことができないのはなぜですか?
... const' 'の*右*場所は常に正しい理由です。 +1 –
@DavidRodríguez-dribeasしかし、ほとんどの人は* left *バージョンを使用しています。もし私が正しく覚えていれば、標準仕様に大部分のコードを含めると... – leemes
'const int *& 'を右から左に読んで、あなたは"定数intへのポインタへの参照 "を取得します。 - それは私が知る必要があったすべてです、ありがとう! – Ancurio