2011-01-14 7 views
25

C++にJavaのアノテーションのようなものがありますか?C++のJavaのようなアノテーション

たとえば、@Overrideアノテーションは別の関数を上書きする関数をマークし、そうでない場合はコンパイル時にエラーを返します。

私はC++でこれを探しています。

答えて

8

C++0xこの機能を使用すると、メンバー関数が基本クラスの関数をオーバーライドするかどうかを明示的に指定でき、コンパイラによって生成されたデフォルトの実装を使用することができます。

+2

C++ 11がリリースされたので、この機能について説明するドキュメントはありますか? –

+1

また、あなたは特にどの機能を指していますか? –

+0

上記のC++ 0xリンクをクリックするだけで、wikipediaドキュメントのそのセクションに移動できます。 – Ruben

1

オーバーライド「注釈」を持つ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

言語にはこれがありません。あなたが望むことができる最高のものは、コンパイラ固有のオプションです。私はあなたのコンパイラのための "プラグマ"のドキュメントをチェックすることから始めます。

16

C++ 11は、Javaアノテーションのスーパーセットと見ることができる「一般化された属性」をサポートしています。変数/関数だけでなく、ステートメントなどにも適用できます。しかし、C++ 11は一般化された属性の構文しか定義しておらず、ユーザーがそれらを定義する手段ではありません。

この記事では、一般的な属性の良い概要を示します:http://www.codesynthesis.com/~boris/blog/2012/04/18/cxx11-generalized-attributes/

GCCは特に基づいて、コンパイラプラグインが期待されているユーザー定義属性のサポートを実装するにはhttp://gcc.gnu.org/projects/cxx0x.html

によると、バージョン4.8から、この機能をサポートしています高水準の言語統合などhttps://fedorahosted.org/gcc-python-plugin/

+0

これは私がこれまで見てきたアノテーションに最も近いものです!この有益な答えをありがとう – bquenin

関連する問題