У меня есть проект 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'
Я пытался добавить публичную using Bar< Foo >::Base_Do;
к class Foo
, но это не помогло.
Есть ли способ сделать эту работу, или мне нужно будет поместить конкретную Base_Do()
реализацию в Foo
и не использовать Bar<>
?
Спасибо, PaulH