Ric*_*ard 0 c++ macros metaprogramming c-preprocessor
我正在尝试创建一个宏,让我从一些打字中安全,并使其更好/更容易定义属性,这就是我的想法:
#define DefineProperty(Access, Type, Name) \
property<Access, Type> ##Name; \
void Set##Name(Type); \
Type Get##Name(void); \
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
宏替换发生如下:
DefineProperty(ReadOnly, int, Foo)
DefineGetReadOnly(Foo, int)
int GetFoo();
DefineProperty(WriteOnly, int, Bar)
DefineGetWriteOnly(Bar, int)
/* no tokens */
Run Code Online (Sandbox Code Playgroud)