我有一些类,像C++重写力
class object {
public:
virtual std::string name() const;
};
它提供了一些接口,我希望所有衍生成覆盖方法name
。 问题是,它没有被覆盖,在编译时没有任何中断,但我在运行时遇到问题。 是否有任何方法来强制方法重写? 编辑:我想在所有衍生物强制执行重写,而不仅仅是直接贬低者!
我有一些类,像C++重写力
class object {
public:
virtual std::string name() const;
};
它提供了一些接口,我希望所有衍生成覆盖方法name
。 问题是,它没有被覆盖,在编译时没有任何中断,但我在运行时遇到问题。 是否有任何方法来强制方法重写? 编辑:我想在所有衍生物强制执行重写,而不仅仅是直接贬低者!
可以检查部件是否在基类中定义通过检查它的指针到成员类型:
static_assert(std::is_same<decltype(&U::name), std::string (U::*)()>::value,
"name must be defined directly in U");
这确实意味着在编译时你必须有权访问你感兴趣的所有后代类型。
好吧,它需要将代码添加到后代,而不是添加到对象中。但它仍然有帮助。谢谢! – KAction 2012-08-15 10:45:36
我想问题是这样可以正确地编译。你应该会得到链接错误。 – 2012-08-15 10:08:56
是的,我没有打印定义。为什么?这完全是关于接口。 – KAction 2012-08-15 10:10:15
您是否考虑过使用RTTI? – 2012-08-15 10:16:27