我想编写一个C ++宏groupby
,它会在控制流可能到达该点时发出编译时警告。像这样:
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!");
}
,编译器就会停止并发出警告。
是否可以编写这样的宏?
之所以出现这个想法,是因为TypeScript具有这样的概念。参见assert-never。