Ищу портативный и
относительно чистый метод декларирования
синтаксически засахаренные свойства, которые
скомпилирует в последних компиляторах
для Windows, OSX и Linux.
Вы описываете возможности типа «мета-объект», такие как свойства, определенные во время компиляции или во время выполнения, такие как те, которые могут быть иначе реализованы через «бобы Java» или «отражение .NET», или любое количество способы работы с высокоуровневыми языками сценариев, такими как Python и Perl.
Например, то, что вы описываете (свойства времени компиляции и / или времени выполнения), реализовано в библиотеках Qt (C ++) через QMetaObject
. Вы можете создать его экземпляр напрямую, использовать его в качестве «члена» в своих классах или получить от QObject
для «автоматического» получения поведения мета-объекта (и некоторых других вещей, например, помогает «приведение типов» и перекрестные сигналы / слоты -потоки). Конечно, они довольно кроссплатформенные (например, Win, Mac, Posix).
Я не большой поклонник использования __declspec()
, за исключением очень специфичного для платформы использования, такого как явный экспорт типов через «Microsoft Extension DLL» (которого я обычно стараюсь избегать, если это возможно). Я не думаю, что есть какой-либо способ сделать такое использование "кросс-платформенным" (поскольку это конкретное использование специфично для библиотек MS DLL).
Точно так же не составит труда написать собственный класс типа "MyMetaObject
", который по сути является "словарем", "хешем" или "ассоциативным массивом", которые используются вашими объектами и которые динамически заполняются. во время выполнения, даже с вашими внутренними типами (такими как MyColor
, MyTime
, MyFilePath
и т. д.), я делал это несколько раз, и это не должно быть много работы, и это может работать довольно элегантно. (QMetaObject
, как правило, немного более мощный, чем эти простые подходы, но он требует этапа компиляции "moc
", который является очень мощным шагом для генерации кода быстрого поиска для его свойств и включения сигналов / слотов ).
Наконец, вы начинаете слегка касаться домена «Динамический C ++», что подразумевает более легкое, почти скриптовое использование синтаксиса C ++. Вот одно предложение, которое углубляется в это динамическое использование, где вы пишете сценарий с этими свойствами, не требуя повторной компиляции. (Это конкретное предложение основано на поведении типа QMetaObject
, но есть и другие предложения с похожими соображениями об использовании):
http://www.codeproject.com/KB/cpp/dynamic_cpp.aspx
Если вы используете Google «Dynamic C ++» или «C ++ Scripting», у вас может появиться еще несколько идей. В некоторых из этих вещей есть злобные умные мысли.