我有一些课,比如
class object {
public:
virtual std::string name() const;
};
它提供了一些接口,我希望所有派生的方法都覆盖方法name
。
问题是,它没有被覆盖,在编译时没有任何中断,但是我在运行时遇到了问题。
是否有任何方法可以强制执行方法覆盖?
编辑:我想强制覆盖所有衍生物,而不仅仅是直接欺骗!
答案 0 :(得分:8)
是的,将其设为纯虚拟:
constexpr virtual std::string name() = 0;
答案 1 :(得分:6)
您可以通过检查其指向成员的指针类型来检查成员是否在基类中定义:
static_assert(std::is_same<decltype(&U::name), std::string (U::*)()>::value,
"name must be defined directly in U");
这意味着在编译时您必须有权访问您感兴趣的所有后代类型。