請考慮下面的代碼: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;
這不會正確編譯:編譯器告訴我,doStuff()
在MyPtrImpl
是純虛擬的,即。我未能正確覆蓋它。但是,如果我輸入到int_ptr
之類的東西,並將其作爲MyPtrImpl
的模板參數,則一切正常。
爲什麼編譯器無法在沒有typedef的情況下扣除我的意圖?
...這就是爲什麼* *權的const''位置始終是正確的。 +1 –
@DavidRodríguez-dribeas然而,大多數人使用*左*版。如果我沒有記錯的話,包括標準規範中的大部分代碼...... – leemes
'從右向左讀'const int *&',並且得到「指向常量int的指針」。 - 這就是我需要知道的,謝謝! – Ancurio