我有一个实现引用计数的 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/