我試圖想出一種方法來檢查派生類是否將基類的方法定義爲'虛擬'。基本上我想有以下代碼:編譯時檢查是否定義爲虛擬的方法
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編譯標誌。 任何人都可以提出一個解決方案,不會涉及此標誌?
謝謝!
將它檢查'virtual'ness也? – iammilind 2012-03-27 13:11:03
@iammilind你是什麼意思? – 2012-03-27 13:11:38
@iammilind哦,是的......如果基本方法不是虛擬的,它將破壞構建。 – 2012-03-27 13:12:34