0

VS2003、マネージC ++からのこのコードスニペットがあり、2010 C ++ / CLIの方法で書き直したいのですが、新しいコンパイラは「feature_all」列挙型を受け入れません。誰かが正しく変換する方法を教えてもらえますか?

これはVS2003のスニペットです。

    [Flags]
    __value enum Features: unsigned int
    {
        feature_1 = 1,
        feature_2 = 2,
        feature_3 = 4,
        feature_all = feature_1 | feature_2 | feature_3   // accepted by compiler
    };

VS2010で次のように書いてみました。

    [FlagsAttribute]
    value class enum Features: unsigned int {
        feature1 = 1,
        feature2 = 2,
        feature3 = 4,
        feature_all = feature_1 | feature_2 | feature_3   // not accepted by compiler
    };

しかし、2番目は間違いなく機能していません...

コンパイラは7つのエラーを返します:(C2332、C2236、3x C2065、C2056およびC3115)

4

1 に答える 1

1

適切なキーワードはenumクラスであり、C++11でも採用されています。

[FlagsAttribute]
public enum class Features: int {
    feature1 = 1,
    feature2 = 2,
    feature3 = 4,
    feature_all = feature1 | feature2 | feature3 
};

この列挙型を他の.NETプロジェクトで表示できるようにし、CLSに準拠して、符号なし型をサポートしない言語で使用できるようにすることを想定して、不思議な下線も削除したことに注意してください。 intはデフォルトであり、省略できます。必要に応じて微調整します。

于 2013-03-10T17:35:23.073 に答える