我在继承和模板方面遇到以下问题:
class Base {};
class Deriv : public Base {};
template <class T> class X{};
void f(X<Base>& inst) {}
int main()
{
X<Base> xb;
f(xb);
X<Deriv> xd;
f(xd);
return 0;
}
程序无法编译,因为X<Base>
之间没有关系。和X<Deriv>
。尽管如此,我认为应该可以做 X<Base>
可以做的一切事情。还有X<Deriv>
。除了复制 f
的函数体之外,我还能做些什么吗?到一个新功能void g(X<Deriv>& inst)
?
最佳答案
您可以继续使用模板:
template<class T>
void f(X<T>& inst) {}
适用于 X<Base>
和X<Derived>
.
编译器可能复制代码(如果它不够智能),但您不必这样做。
关于c++ - C++ 中的继承和模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10045827/