我正试图想出一种方法来检查派生类是否将基类的方法定义为“虚拟”。基本上我想要以下代码:
class A {
virtual void vfoo() {}
void foo() {}
virtual ~A() {}
};
class B : public A {
virtual void vfoo() {
MAGIC_CHECK(m_pA->vfoo()); // succeed
// code
m_pA->vfoo();
// code
}
virtual void foo() {
MAGIC_CHECK(m_pA->foo()); // fail compilation because foo is not virtual!
// code
m_pA->foo();
// code
}
A * m_pA;
};
问题是,我该如何实现这个MAGIC_CHECK? 一个解决方案是使用-Woverloaded-virtual compilation标志。 任何人都可以建议一个不涉及这面旗帜的解决方案吗?
谢谢!
答案 0 :(得分:3)
在C ++ 11中,可以在override
的函数声明末尾添加class
,如果函数没有覆盖任何内容,它将发出警告:
class B : public A {
virtual void vfoo() override { //OK
}
virtual void foo() override { //error
}
};
答案 1 :(得分:1)
在C ++ 03标准中,不可能检查方法是否声明为virtual
。
你可以关注,