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