列挙型について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

列挙型について

#1

投稿記事 by jay » 14年前

たとえば以下のような列挙型を用意するとします
ついでにCOLOR型の変数colorを宣言します

コード:

enum COLOR{RED, BLUE, GREEN, WHITE};
COLOR color;
そしてcolorに値を入れるとき
color = COLOR.

と入力するとVisualC#2010(XNA使用)なら列挙型COLORのメンバのリストが出てきて、そこから値を選択し以下のように記述できるのですが
color = COLOR.GREEN;

VisualC++2008(DXライブラリ使用)ではそれができません。
同じように
color = COLOR.

と書いてもリストは出てきませんし、
color = COLOR.GREEN;

と記述するとエラーを吐き出します。
C++の場合 . はクラスか構造体か共用体の後ろにしかつけられない(とこの記事を書いている途中に気付いた)のでエラーを吐き出すのは当然ですが。
C++環境でも列挙型または定数をC#と同じようにメンバのリストから選べるようにするにはどうすればいいでしょうか?

クラスに定数を組み込むしかないでしょうか?
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 列挙型について

#2

投稿記事 by beatle » 14年前

C++11の新しい列挙型を使えば

コード:

enum class COLOR { RED, BLUE, GREEN, WHITE };
COLOR color;
color = COLOR::RED;
のように書けます。
しかしVisual C++ 2008では使えないかもしれません。

C++03までの機能で同じようなことをやるには、例えばこんな感じになります。

コード:

struct Color {
    typedef enum {
        RED, BLUE, GREEN, WHITE
    } Kind;
};
Color::Kind color;
color = Color::RED;
このやり方だと、残念ながら Color color = Color::RED; のようには書けず、どうしてもKindという
余計な型が登場してしまいますが。

もっと凝りだすとhttp://www.geocities.jp/bleis_tift/cpp/ ... eenum.htmlこんな感じの実装もできるようです。僕はこの実装方法を試したことはありませんが。
今更こんな凝った実装をするより、早くC++11の新しい列挙体を使うようにしたほうが良いとは思います。

Blue

Re: 列挙型について

#3

投稿記事 by Blue » 14年前

比較対象をC#にしているのでC++では言語仕様が違うので同じようには記述できません。

C++/CLIではenum class(CLI列挙型)があるので、C#に近い記述ができます。

jay
記事: 314
登録日時: 15年前
住所: 大阪市
連絡を取る:

Re: 列挙型について

#4

投稿記事 by jay » 14年前

思ったより反応が遅くなってしまった…。 申し訳ないです。

今回はbeatleさんが教えてくださったやり方で行くことにしました。

C++11はツールの方がもう少しシッカリ対応してくれるようになってから使うことにします(泣)
僕一人が使ってても、回りがその仕様に対応していない可能性が大きいですので(苦笑)


教えてくださったお二方、どうもありがとうございました。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ

閉鎖

“C言語何でも質問掲示板” へ戻る