gpt4 book ai didi

c++ - 预处理器宏串联以构建类函数

转载 作者:行者123 更新时间:2023-11-28 06:29:55 27 4
gpt4 key购买 nike

我需要一个 POD 配置结构数组,其中包含指向某些长名称类中的静态函数的指针,例如

typedef void (*MyFn)();

struct MyData {
MyFn myFn;
...
};

...
struct MyData const configArr[] = {
{ ... },
...
};

要使用的函数看起来像 void AClass::AnotherClass::YetAnotherClass::someFn();

我看到三个选项:

  1. 使 configArr 成为 AClass::AnotheClass::YetAnotherClass 的成员,
  2. 在配置中使用全名。我不喜欢他们中的任何一个,
  3. 我尝试了通常的两级预处理器连接,它提示说:

    'pasting "::" and "xxx" does not give a valid preprocessing token'.

我想到的最好的办法是为 conf 中使用的所有函数设置一些通用前缀。

即:AClass::...::prefSomeFn();并使用 'AClass::...::pref' 和 'SomeFn' 的连接它有效,但它看起来仍然太难看。

有没有更好的出路?

最佳答案

'pasting "::" and "xxx" does not give a valid preprocessing token'.

那是因为它们独立的标记;您不需要粘贴它们,只需将它们放在扩展中相邻即可:

struct ClassWithALongName { int i; };
#define X(MemberId) &ClassWithALongName::MemberId
auto ptr = X(i);

关于c++ - 预处理器宏串联以构建类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27791343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com