C++:什么方法可以阻止抽象基类的任何实例化?

Jas*_*n S 15 c++ class abstract

除了拥有纯虚函数之外,有没有办法阻止抽象基类的实例化?

我可以做这个:

class BaseFoo
{
    virtual void blah() = 0;
};

class Foo : public BaseFoo
{
    virtual void blah() {}
};
Run Code Online (Sandbox Code Playgroud)

但是我想避开一个vtable.(根据我关于虚拟析构函数的其他问题)

Microsoft ATL有ATL_NO_VTABLE来实现这一点(或者至少我认为这就是它的作用......)

Bli*_*ndy 35

一种非常明显的方法是声明受保护的构造函数,并在非抽象派生类中声明公共构造函数.

这当然会将corectness的负担转移到派生类,但至少基类是受保护的.

  • 嗯,明显相比疯狂的模板黑客,我期待人们发布! (3认同)

thu*_*eys 5

你可以创建一个受保护的构造函数