#include <vector>
class Base
{
public:
virtual void foo() = 0;
};
template<typename Bar>
class Cloud : public Base
{
public:
void foo()
{
}
};
class Water
{
};
int main()
{
Cloud<Water> cloud;
std::vector<Base> stuff;
stuff.push_back(cloud);
}
上面所示的代碼失敗與MSVC 14.1如下:爲什麼派生的模板類的函數沒有覆蓋非模板化的基類的純虛函數?
error C2259: 'Base': cannot instantiate abstract class
note: due to following members:
note: 'void Base::foo(void)': is abstract
爲什麼Base::foo()
仍然即使Cloud
實現它的抽象?
我該如何實現這一點,Cloud
仍然從Base
派生,覆蓋foo()
並保持與typename Bar
模板?
謝謝你很好解釋的答案!保持多態行爲絕對是我的本意。我決定使用'std :: unique_ptr'來代替,因爲我不需要引用計數。 – tambre
@tambre在這種情況下,您需要爲'Base'提供一個虛擬析構函數。 –