Я хотел бы написать макрос C ++ ASSERT_NEVER
, который бы выдал предупреждение во время компиляции , когда поток управления может достичь этой точки.Примерно так:
class Base { protected: explicit Base(); };
class A: public Base {};
class B: public Base {};
// class C: public Base {};
void doSomething (Base *pObj)
{
if (dynamic_cast<A*>(pObj) != NULL) doA();
else if (dynamic_cast<B*>(pObj) != NULL) doB();
else ASSERT_NEVER("You forgot one case, dude!");
}
Итак, приведенный выше код будет компилироваться без предупреждения.Как только вы введете class C
, компилятор остановится и выдаст предупреждение.
Возможно ли написать такой макрос?
Идея возникла, потому что в TypeScript есть такая концепция,См. assert-never .