c++ - 如何检测和断言特定类的虚拟继承?

标签 c++ visual-c++ inheritance virtual-inheritance

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

我想要某种方式在编译时或至少在运行时断言此要求。

有什么办法可以实现吗?

最佳答案

是这样的吗?

struct RefCounter {
    template <typename T>
    RefCounter(T *) {
        BOOST_STATIC_ASSERT(boost::is_virtual_base_of<RefCounter, T>);
    }
};

struct GoodClass : virtual RefCounter {
    GoodClass() : RefCounter(this) {}
};

struct BadClass : RefCounter {
    BadClass() : RefCounter(this) {}
};

不过,需要将 this 传递给构造函数以捕获派生类型是一种耻辱。当然,故意迟钝的用户可以通过传递 this 以外的内容来颠覆它。

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

相关文章:

c++ 和 portaudio,可怕的扭曲输出

python - 使用 Ctypes (SpecialKEval) 将 C++ 代码嵌入到 Python 中

visual-studio-2010 - 将库添加到 Visual Studio 2010 express

c++ - 关于继承中 protected 成员的问题

c++ - 我不明白这个链接错误

c++ - 实现数据输入速记?

c++ - Visual C++ 中的双重检查锁定和 unique_ptr 静态初始化

c++ - 使用单例创建对话框

python - 为什么这个继承结构是这样构建的呢?

c# - 奇怪的继承修改