我有一個關於繼承和模板方法的問題。假設我有這兩類模板化方法的遺傳
class Base
{
public:
template<typename T>
void print(const T& s) {std::cout << "Base (templated) prints " << s << "\n";}
virtual void print(int i) {std::cout << "Base prints " << i << "\n";}
};
class Derived : public Base
{
public:
void print(int i) {std::cout << "Derived prints " << i << "\n";}
}
int main()
{
Derived d;
d.print(3); // works fine
std::string s = "hi";
d.print(s); // does not compile
return 0;
}
編譯器告訴我'不匹配函數調用「派生::打印(的std :: string &)」」。 但是派生,從Base繼承,還應該允許調用模板方法print(..),否?
如果我沒有在派生類中定義一個方法「print」,那麼事情也很奇怪,那麼一切正常,編譯器會調用基類模板方法。
事情做工精細也是,如果我還定義模板方法在派生類中,它調用基類之一,但似乎並不正確,我...
感謝您的幫助。
好吧,我編輯了這個問題,原因是有一些我特別忽略了。我試圖簡化這個問題,但我可能忽略了重要的細節(如虛函數)。 – bartgol