2
我正在尝试将多态与模板派生类一起使用。考虑下面的代码:具有模板派生类的基类纯虚函数
// base class
class A {
public:
virtual void f() = 0;
};
// templated derived class
template< typename T >
class B : public A {};
template <> //define a specialization of B
class B<int> {};
// trying to define a specialization of f
template <>
void B<int>::f() {}
我的基类有纯虚函数f
。我正在存储一个基类指针向量A*
,并且想在所有这些向量上调用f
,并在模板派生类中使用适当的多态性。然而,我无法将f的特例,因为我收到以下错误:
test.cpp:17:18: error: no member function ‘f’ declared in ‘B<int>’ void B<int>::f() {}
显然错误这里是f
实际上不是模板类的成员函数。有什么办法可以定义f的特化(或几乎相同的东西),或者这是不可能的?如果不可能,你能提出另一种方法吗?
[道歉,如果这是一个重复 - 我搜查,发现对模板,继承和多态的问题许多变化,但没有完全相符我的。]
专业化不应该从'A'继承吗? – Rakete1111
谢谢,这解决了这个问题(尽管我的代码中有一些额外的错误)。 @ Rakete1111是正确的,专业化需要从A继承为了多态性的工作,我错过了。 – user7359309
是的,这也是另一个问题,纠正了。 –