c++ - 具有某种条件的宏

标签 c++ macros c-preprocessor metaprogramming

我正在尝试创建一个宏,这样可以使我免于打字,并使定义属性变得更好/更容易,这就是我的想法:

#define DefineProperty(Access, Type, Name) \
property<Access, Type> ##Name; \
void Set##Name(Type); \
Type Get##Name(void); \

其中 Access 是一个具有三个可能值的枚举:ReadOnly、WriteOnly 和 ReadWrite。仅当访问值适合该方法时,才应定义宏中的方法。

这是否有任何可能,例如使用元编程?

最佳答案

是的,您可以相当轻松地完成此任务:

#define DefineGetReadOnly(Name, Type)  Type Get##Name();
#define DefineGetReadWrite(Name, Type) Type Get##Name();
#define DefineGetWriteOnly(Name, Type)

#define DefineProperty(Access, Type, Name) \
    DefineGet##Access(Name, Type)

宏替换发生如下:

DefineProperty(ReadOnly, int, Foo)
DefineGetReadOnly(Foo, int)
int GetFoo();

DefineProperty(WriteOnly, int, Bar)
DefineGetWriteOnly(Bar, int)
/* no tokens */

关于c++ - 具有某种条件的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4521142/

相关文章:

c - C 宏中未声明(在此函数中首次使用)

c - 为什么在定义宏中使用括号会出错?

c++ - 如何从 MNIST 数字数据库中读取像素并创建 iplimage

c++ - 对齐究竟如何影响内存布局和新布局的行为?

linux - 用于 GCC/G++ 的宏来区分 Linux 和 Mac OSX?

c++ - 如何保证在粘贴之前参数的完整宏扩展?

c++ - 正在进行的返回值转换的说明

c++ - std::mt19937 是否需要预热?

c++ - 我想使用宏多参数始终为空来跟踪日志。 c++ windows 问题

c - #define语句解释