我有一个 Visual Studio 2008 C++ 项目,其中有一个继承自抽象基类的类和另一个在抽象基类中实现函数的模板类。例如:
class Foo;
struct Buzz
{
virtual ~Buzz() {};
virtual void Buzz_Do( Foo* ) = 0;
};
class Base
{
public:
virtual ~Base() {};
virtual void Base_Do( Buzz* ) = 0;
};
template< class T >
class Bar
{
public:
virtual void Base_Do( Buzz* v )
{
v->Buzz_Do( static_cast< T* >( this ) );
};
};
class Foo : public Base, public Bar< Foo >
{
};
int _tmain(int argc, _TCHAR* argv[])
{
Foo c;
return 0;
}
不幸的是,这会产生编译器错误:
1>MyApp.cpp(39) : error C2259: 'Foo' : cannot instantiate abstract class
1> due to following members:
1> 'void Base::Base_Do(Buzz *)' : is abstract
1> MyApp.cpp(17) : see declaration of 'Base::Base_Do'
我试过添加公共(public) using Bar< Foo >::Base_Do;
至 class Foo
,但这没有帮助。
有没有办法让这个工作,或者我需要把一个具体的 Base_Do()
在 Foo
中实现并且不使用 Bar<>
?
谢谢, 保罗H
最佳答案
如果可能的话让 Bar<>
从基地派生,
和 Foo 仅派生自 Bar<T>
.
关于c++ - 在另一个模板基类中实现抽象基类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4441797/