C++预处理器连接

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"不提供有效的预处理令牌

有一种方法可以连接函数名称和它的对象吗?

jac*_*nad 5

使用内联函数比使用宏更好.使用任何好的编译器,这将为您提供与宏相同的效率,但如果需要,可以添加类型检查和调试符号.

  • +1,我同意.使用像这样的宏是令人讨厌的,可能不需要. (3认同)