我有一个实现引用计数的C++类,我希望该类的所有用户只能从该类中虚拟继承,以便没有对象最终具有多个引用计数器。

我想以某种方式在编译时或至少在运行时声明此要求。

有没有办法做到这一点?

最佳答案

我认为包装类是最简单的选择。而不是直接从RefCounter继承,而是创建一个中间类。

struct RefCounterVirtPrivate_
{
    int count;

    RefCounterVirt()
        : count( 0 )
    { }
};

struct RefCounter : public virtual RefCounterVirtPrivate_
{
};

struct A : public RefCounter { };
struct B : public RefCounter { };
struct C : public A, public B { };

这样,所有内容都可以从RefCounter继承,而无需关心虚拟继承。您甚至不必更改任何现有代码-RefCounter本身的虚拟继承应该是无害的。

当然,这不能保证人们不会直接从RefCounterVirtPrivate_继承,这就是为什么我给它起了一个明显的名字的原因。意外地做到这一点比忘记virtual关键字更难。

关于c++ - 如何检测和断言特定类的虚拟继承?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8559477/

10-11 23:18
查看更多