C++强制覆盖

KAc*_*ion 4 c++ virtual overriding c++11

我有一些课,比如

class object {
public:
virtual std::string name() const; 
};
Run Code Online (Sandbox Code Playgroud)

它提供了一些接口,我希望所有派生都覆盖方法name.问题是,它没有被覆盖,在编译时没有任何中断,但是我在运行时遇到了问题.是否有任何方法可以强制执行方法覆盖?编辑:我想强制覆盖所有派生,而不仅仅是直接的欺骗!

eca*_*mur 8

是的,让它成为纯粹的虚拟:

constexpr virtual std::string name() = 0;
Run Code Online (Sandbox Code Playgroud)


eca*_*mur 6

您可以通过检查其指向成员的指针类型来检查是否在基类中定义了成员:

static_assert(std::is_same<decltype(&U::name), std::string (U::*)()>::value,
              "name must be defined directly in U");
Run Code Online (Sandbox Code Playgroud)

这意味着在编译时您必须有权访问您感兴趣的所有后代类型.