Не могли бы вы объяснить, как получить информацию из атрибутов на С++? Например, я хочу написать С++ для связывания python. Для этого мне нужно аннотировать все методы в классе с определенной информацией привязки. Теперь мне нужно сгенерировать некоторый код по атрибутам. Или другой пример, класс карты для объекта db. Или атрибуты С++ 11 не совпадают с аннотациями Java или С#?
Используя атрибуты С++ 11
Ответ 1
Атрибуты (a новая функция С++ 11) - всего лишь стандартизованный синтаксис для расширений компилятора. Чтобы делать то, что вам нужно, вам понадобится компилятор с соответствующими расширениями. До сих пор я не думаю, что какой-либо компилятор даже реализует синтаксис атрибутов, а тем более любые конкретные атрибуты для привязок Python.
Поскольку они предназначены для расширений компилятора, нет стандартного способа создания ваших собственных атрибутов, например, с помощью аннотаций Java или атрибутов С#. Конечно, компилятор мог бы обеспечить эту способность как расширение...;)
Ответ 2
Обновление с более новой информацией:
Теперь GCC (начиная с 4.8) реализует атрибуты С++ 11 в качестве альтернативного синтаксиса для __attribute__((XXX))
.
Вы также можете использовать механизм плагина GCC для определения новых атрибутов - см. https://gcc.gnu.org/onlinedocs/gccint/Plugins.html.
Вы также можете сделать это в python, используя gcc-python-plugin - см. https://gcc-python-plugin.readthedocs.org/en/latest/attributes.html.