所以我有这棵巨大的树,它基本上是一个大开关/案例,带有字符串键和一个公共对象上的不同函数调用,具体取决于键和一个元数据。
每个条目基本上看起来像这样
} else if ( strcmp(key, "key_string") == 0) {
((class_name*)object)->do_something();
} else if ( ...
wheredo_something
可以有不同的调用,所以我不能只使用函数指针。此外,某些键需要将对象强制转换为子类。
现在,如果我要用更高级的语言编写代码,我会使用 lambda 字典来简化它。
我突然想到我可以使用宏将其简化为类似
case_call("key_string", class_name, do_something());
case_call( /* ... */ )
wherecase_call
将是一个宏,可以将此代码扩展为第一个代码片段。
然而,我非常怀疑这是否会被认为是好的风格。我的意思是,它会减少打字工作并提高代码的干性,但它确实似乎在某种程度上滥用了宏系统。
你会沿着那条路走,还是宁愿把整件事都打出来?你这样做的理由是什么?
编辑
一些澄清:
此代码用作简化脚本 API 之间的粘合层,该 API 将 C++ API 的几个不同方面作为简单的键值属性访问。这些属性在 C++ 中以不同的方式实现:有些具有 getter/setter 方法,有些设置在特殊的结构中。脚本操作引用转换为公共基类的 C++ 对象。但是,某些操作仅在某些子类上可用,并且必须被取消。
再往前走,我可能会更改实际的 C++ API,但就目前而言,它必须被视为不可更改。此外,这必须在嵌入式编译器上工作,因此(遗憾的是)boost 或 C++11 不可用。