Java-подобные аннотации в C ++ - PullRequest
28 голосов
/ 14 января 2011

Есть ли что-то вроде аннотаций Java в C ++?

Например, аннотация @Override помечает функцию, которая переопределяет другую функцию, и если этого не произойдет, она выдаст ошибку во время компиляции.

Я ищу что-то подобное в C ++.

Ответы [ 4 ]

19 голосов
/ 03 мая 2013

C ++ 11 обеспечивает поддержку обобщенных атрибутов , которые можно рассматривать как расширенный набор аннотаций Java, поскольку их можно применять не только к переменным / функциям, но и, например, к операторам.Но C ++ 11 определяет только синтаксис для обобщенных атрибутов, а не средства для их определения пользователем.

Эта статья дает хороший обзор обобщенных атрибутов : http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/

GCC поддерживает эту функцию начиная с версии 4.8 в соответствии с: http://gcc.gnu.org/projects/cxx0x.html

Для реализации поддержки пользовательских атрибутов многообещающие плагины компилятора, особенно основанные на интеграции языка высокого уровня, такие как https://fedorahosted.org/gcc-python-plugin/

8 голосов
/ 14 января 2011

C ++ 0x будет иметь эту функцию, где вы можете явно указать, предназначена ли функция-член для переопределения функции базового класса, использовать реализацию по умолчанию, созданную компилятором, и многое другое.1003 *

1 голос
/ 14 января 2011

Существует C ++ 0x, который имеет переопределение «аннотация».Или, если вы хотите получить больше похожего на Java "интерфейсного" кода, который выдает ошибки, если вы не реализуете методы, вы можете использовать абстрактный класс:

    class Base {
public:
    virtual void foo() = 0;
};

class Extended : public Base {
public:

    void foo2() {
        cout << "hi" << endl;
};

int main() {
    Extended e;
    e.foo();
}

Это приведет к ошибке компилятораесли вы не переопределите foo в базовом классе.Однако проблема в том, что базовый класс не может иметь собственную реализацию.

0 голосов
/ 14 января 2011

Там нет ничего в языке для этого. Лучшее, на что вы можете надеяться - это опция, специфичная для компилятора. Я бы начал с проверки документации по "pragma" для вашего компилятора.

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