c++ - 在另一个模板基类中实现抽象基类函数

标签 c++ templates compiler-errors

我有一个 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/

相关文章:

C++ 表现出奇怪的行为

c++ - 如何删除结构数组的元素?

c++ - 两个模板类互相用作模板参数

c++ - 是否可以在编译 (g++) 之前使用实例化模板查看 C++ 代码?

amazon-web-services - ec2 的 AWS Cloudformation 默认 key 对

c++ - 类模板的显式实例化而不是实例化构造函数

visual-studio-2010 - 没有为Visual Studio “SQLBuildTask”任务提供必需参数 “DatabaseName”错误的值

visual-c++ - LNK2019 内联函数 Unresolved 错误

c++ - 在 Eclipse 中使用自己的 Makefile 导入现有的 QT C++ 项目

java - 在 java 中将两个字节(一个正数和另一个负数)组合成 short