在Visual Studio中,有一个名为
我正在寻找一种可移植且相对清晰的声明语法糖属性的方法,该方法将在Windows、OSX和Linux的最新编译器中编译。我不关心编译器兼容性,只需要每个平台一个编译器。
我不寻找需要使用括号来获取或设置属性(例如用于区分getter和setter的重载方法)的属性替代方法。
以下是在Visual Studio 2010中编译的理想用法:
__declspec(property)
的功能可以创建类似C#属性的属性。Borland C++提供了具有完全相同功能的__property
关键字。在C++0x中,提到了一个implicit
关键字,可以扩展实现相同的功能。但它没有被列入规范。我正在寻找一种可移植且相对清晰的声明语法糖属性的方法,该方法将在Windows、OSX和Linux的最新编译器中编译。我不关心编译器兼容性,只需要每个平台一个编译器。
我不寻找需要使用括号来获取或设置属性(例如用于区分getter和setter的重载方法)的属性替代方法。
以下是在Visual Studio 2010中编译的理想用法:
#define _property(_type, _name, _get, _put) __declspec(property(get=_get, put=_put)) _type _name
#define _property_readonly(_type, _name, _get) __declspec(property(get=_get)) _type _name
class Window
{
public:
_property_readonly(void*, Handle, GetHandle);
_property(bool, Visible, GetVisible, SetVisible);
void* GetHandle();
bool GetVisible();
void SetVisible(bool);
}
void main()
{
Window MainWindow;
if (!MainWindow.Visible)
MainWindow.Visible = true;
}
implicit
关键字。不过我无法访问你发布的链接(它要求输入用户名和密码)。 - James McNellis