小编ose*_*aya的帖子

我可以使用C++宏将代码插入到不同的地方吗?

我想编写一个宏来声明一个结构体字段并将该字段的初始化过程插入到一个Init()函数中。但我发现宏不可能将代码插入到不同的位置(在本例中为字段声明和 Init() 函数定义)。

// I have 
template <typename T>
T* initValue() {
  // return T* or nullptr
}

// I need some sort of 
DECL_CLASS(MyClass)
DECL_FIELD(int, foo)
DECL_FIELD(float, bar)
DECL_CLASS_END()

// To generate
struct MyClass {
  int *foo;
  float *bar;

public:
  bool Init() {
    if (!(foo = initValue<decay_t<decltype(*foo)>>())) {
      return false;
    }
    if (!(bar = initValue<decay_t<decltype(*bar)>>())) {
      return false;
    }
    return true;
  }
};
Run Code Online (Sandbox Code Playgroud)

我可以使用某种代码生成工具(例如 cog)来实现此目的,但我不想在代码库中引入额外的语法。我可以用纯 C++ 实现这个吗?

如果预处理器在这种情况下无法提供帮助,您将如何使该结构定义更简单?

c++ template-meta-programming preprocessor-meta-program

2
推荐指数
1
解决办法
120
查看次数