たとえば以下のような列挙型を用意するとします
ついでにCOLOR型の変数colorを宣言します
そしてcolorに値を入れるとき
color = COLOR.
と入力するとVisualC#2010(XNA使用)なら列挙型COLORのメンバのリストが出てきて、そこから値を選択し以下のように記述できるのですが
color = COLOR.GREEN;
VisualC++2008(DXライブラリ使用)ではそれができません。
同じように
color = COLOR.
と書いてもリストは出てきませんし、
color = COLOR.GREEN;
と記述するとエラーを吐き出します。
C++の場合 . はクラスか構造体か共用体の後ろにしかつけられない(とこの記事を書いている途中に気付いた)のでエラーを吐き出すのは当然ですが。
C++環境でも列挙型または定数をC#と同じようにメンバのリストから選べるようにするにはどうすればいいでしょうか?
クラスに定数を組み込むしかないでしょうか?
列挙型について
Re: 列挙型について
C++11の新しい列挙型を使えば
のように書けます。
しかしVisual C++ 2008では使えないかもしれません。
C++03までの機能で同じようなことをやるには、例えばこんな感じになります。
このやり方だと、残念ながら Color color = Color::RED; のようには書けず、どうしてもKindという
余計な型が登場してしまいますが。
もっと凝りだすとhttp://www.geocities.jp/bleis_tift/cpp/ ... eenum.htmlこんな感じの実装もできるようです。僕はこの実装方法を試したことはありませんが。
今更こんな凝った実装をするより、早くC++11の新しい列挙体を使うようにしたほうが良いとは思います。
しかしVisual C++ 2008では使えないかもしれません。
C++03までの機能で同じようなことをやるには、例えばこんな感じになります。
struct Color {
typedef enum {
RED, BLUE, GREEN, WHITE
} Kind;
};
Color::Kind color;
color = Color::RED;
余計な型が登場してしまいますが。
もっと凝りだすとhttp://www.geocities.jp/bleis_tift/cpp/ ... eenum.htmlこんな感じの実装もできるようです。僕はこの実装方法を試したことはありませんが。
今更こんな凝った実装をするより、早くC++11の新しい列挙体を使うようにしたほうが良いとは思います。
-
Blue
Re: 列挙型について
思ったより反応が遅くなってしまった…。 申し訳ないです。
今回はbeatleさんが教えてくださったやり方で行くことにしました。
C++11はツールの方がもう少しシッカリ対応してくれるようになってから使うことにします(泣)
僕一人が使ってても、回りがその仕様に対応していない可能性が大きいですので(苦笑)
教えてくださったお二方、どうもありがとうございました。
今回はbeatleさんが教えてくださったやり方で行くことにしました。
C++11はツールの方がもう少しシッカリ対応してくれるようになってから使うことにします(泣)
僕一人が使ってても、回りがその仕様に対応していない可能性が大きいですので(苦笑)
教えてくださったお二方、どうもありがとうございました。
♪僕たちは まだ森の中 抜け出そう 陽のあたる場所へ