Vit*_* Py 0 c++ concatenation c-preprocessor
我有一个带有函数指针的函数构建.我认为尝试与预处理器宏交换此功能可能会更快.至少,我想尝试宏,以便我可以测量它是否生成更快的代码.
它或多或少是这样的:
typedef int (Item::*GetterPtr)(void)const;
typedef void (Item::*SetterPtr)(int);
void doStuff(Item* item, GetterPtr getter, SetterPtr setter, int k)
{
int value = (item->*getter)();
// .. Do some stuff
(item->*setter)(newValue);
}
Run Code Online (Sandbox Code Playgroud)
它被称为
// ...
doStuff(&item, &Item::a, &Item::setA, _a);
doStuff(&item, &Item::b, &Item::setB, _b);
doStuff(&item, &Item::c, &Item::setC, _c);
// ...
Run Code Online (Sandbox Code Playgroud)
我认为可以用以下方式交换它:
#define DO_STUFF(item, getter, setter, k) do { \
int value = item ## -> ## getter ## (); \
//... \
item ## -> ## setter ## (newValue); \
} while(0);
Run Code Online (Sandbox Code Playgroud)
但它给了我错误,如:
错误:粘贴")"和"setA"不提供有效的预处理令牌
有一种方法可以连接函数名称和它的对象吗?
使用内联函数比使用宏更好.使用任何好的编译器,这将为您提供与宏相同的效率,但如果需要,可以添加类型检查和调试符号.