Независимые от компилятора свойства C ++ - PullRequest
2 голосов
/ 12 августа 2011

Компилятор Microsoft Visual C ++ имеет конструкцию объявления свойства

__declspec( property( get=get_func_name, put=put_func_name ) )

Существует ли независимая от компилятора версия Microsoft C ++ __declspec (свойство (...)) или другие аналоги?

Ответы [ 3 ]

4 голосов
/ 12 августа 2011

Как обычно, идентификатор, которому предшествует __, зарезервирован для компилятора.В C ++ 03 у вас есть __cpluscplus (для идентификации C ++ против C), __FILE__ и __LINE__.Все это объекты препроцессора.

В C ++ 0x разница стирается введением слова __attribute__, которое является первым из известных мне, которое имеет значение семантики, но все равно не выполняет то, чтовы ищете.

РЕДАКТИРОВАТЬ : Обращаясь к @James пятно в комментарии.

0 голосов
/ 12 августа 2011

Как говорит Никола Мусатти, было предложение Borland , главным образом потому, что Borland Delphi интенсивно использует свойства, а C ++ Builder (их C ++ «эквивалент» Delphi) поэтому требует его .

В C ++ Builder код выглядит примерно так:

__property __int64 Size = {read=GetSize, write=SetSize};
0 голосов
/ 12 августа 2011

Нет. Подобные механизмы были предложены стандартному комитету C ++, но ни один из них не был принят (Вот одно из таких предложений от Borland ).

Я видел реализации игрушек на основе шаблонов, но они, как правило, слишком неудобны для практического использования, основные проблемы:

  • Поскольку вложенные экземпляры класса не являются членами включающего класса (как и экземпляры внутреннего класса Java), вы должны явно "подключить" свойство к его включающему классу, что делает объявление и инициализацию громоздкой.

  • Невозможно вызвать функциональные объекты без скобок, поэтому вы не можете вызывать пользовательское свойство, как если бы вы обращались к переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...