我正在尝试以一种可以极大地简化我的开发进度的方式使用 C++ 中的预处理器!我有一个非常简单的问题,我在使用常规 C++ 类的同时使用 C API 库。这个库基于回调/事件,我只能提供函数(而不是方法)。因此,我有一个重复的模式,为每个事件声明一个静态和非静态函数:
public: // Here is the static method which is required
static inline Vector StaticEventClickLeft(Vector vec) { return globalClass->EventClickLeft(vec); }
private: // And here is the method (i.e non-static)
Vector EventClickLeft(Vector vec);
我想创建一个宏,在一行中定义这两个。它会使我的标题的大小至少减少十倍!这是我最接近的尝试(但还远远不够):
#define DECL_EVENT(func, ret, ...) \
public: static inline ret S ## Event ## func(__VA_ARGS__) { return globalClass->Event ## func(__VA_ARGS__); } \
private: ret Event ## func(__VA_ARGS__);
如果我像这样使用这个宏DECL_EVENT(ClickLeft, Vector, Vector vec)
。这将是输出:
public: static inline Vector SEventClickLeft(Vector vec) { return globalClass->EventClickLeft(Vector vec); }
private: Vector EventClickLeft(Vector vec);
你可以清楚地看到问题所在。静态函数调用该方法并提供参数的类型以及名称。由于指定了类型,因此会导致编译器错误;include/plugin.h:95:2: error: expected primary-expression before ‘TOKEN’ token
.
那么我该如何解决呢?必须有一些解决方案,我相信一些宏观专家可以提供一些帮助!