В Visual Studio существует __declspec(property)
, который создает свойства, похожие на С#. Borland С++ предлагает ключевое слово __property
с точно такой же функциональностью. В С++ 0x упоминается ключевое слово implicit
, которое может быть расширено для реализации той же функциональности. Но он не попал в спецификацию.
Я ищу переносимый и относительно чистый метод объявления синтаксически sugared-свойств, которые будут компилироваться в последних компиляторах для Windows, OSX и Linux. Меня не интересует совместимость компилятора, только один компилятор на платформу.
Я не ищу альтернативы свойствам, которые требуют скобок, чтобы получить или установить свойство, например перегруженные методы, разделяющие геттеры и сеттеры.
Вот идеальное использование, которое компилируется в 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;
}