Я пытаюсь найти способ проверки в производном классе, определяется ли метод базового класса как «виртуальный». В основном я хотел бы иметь следующий код:Проверка времени компиляции метода, определенного как виртуального
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. Может ли кто-нибудь предложить решение, которое не будет включать этот флаг?
Спасибо!
Будет ли это проверить 'virtual'ness также? – iammilind
@iammilind, что вы имеете в виду? –
@iammilind oh, да ... он сломает сборку, если базовый метод не является виртуальным. –