2015-09-12 5 views
8

質問状態と同様に、私はC++で名前空間と列挙子の属性が存在することを知っています。これは私たちのコードにどのような影響を与えますか?それらの属性は何ですか?また、それらの属性は何をすることができますか?私はこの新しい機能を理解するための良いリソースを見つけることができませんでした。C++ 17が名前空間と列挙子に属性を追加するのはなぜですか?

+3

これで、名前空間または属性を持つ列挙型を非難することができます。それらの属性は現在存在するものと同じものです。 – chris

+1

それはそれですか? namespace/enumの非推奨のみが利用可能になりますか? – DawidPi

+4

新しい属性を標準化したい場合は、それらを提案してください。 GCCやClangのようなコンパイラは、標準的なものよりも多くをサポートしています。とにかく、[提案](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4196.html)を読むことができます。私も以前のコメントを修正する必要があります。私はenumsを言ったが、私は列挙子を言うべきだった。 – chris

答えて

10

現在、特定の列挙型の値を控えめにする場合は、コンパイラの拡張機能に依存する必要があります。

enum OperationMode { 
    OM_Invalid, 
    OM_Normal, 
    OM_Terrified __attribute__((deprecated)), 
    OM_AbortOnError __attribute__((deprecated)) = 4 
}; 

列挙型と名前空間は属性をサポートすると、同様の機能を実装するための標準クロスコンパイラの方法があるでしょう:

enum OperationMode { 
    OM_Invalid, 
    OM_Normal, 
    OM_Terrified [[deprecated("re-named to invalid")]], 
    OM_AbortOnError [[deprecated("exceptions are used instead")]] = 4 
}; 
例えば、打ち鳴らすには、あなたは推奨されない列挙型は、次のように値を指定します

他の属性は1日名前空間と列挙値との関連性を見つけることが、提案・ライターとして述べていることがあります。

本稿では、属性を可能にすることにより、これらの問題を解決する提案します〜 を列挙子と名前空間で指定し、 が意図したように、これらのエンティティに適用する [[deprecated]]属性を拡張します。

関連する問題