No.5ベストアンサー
- 回答日時:
>数値をenumに変換して入力するにはどうすればよいのでしょうか?
enum class型の変数へ数値を直接代入するには以下のようにします。(面倒・・・)
Numbers^ numbers = static_cast<Numbers^>(Enum::ToObject(Numbers::typeid, 2));
ただし、この方法で代入する場合、enum class型に定義されていない数値も代入できてしまいます。これを回避するためにはIsDefinedメソッドを使用します。
Numbers^ numbers = Numbers::Fifth;
if(Enum::IsDefined(Numbers::typeid, 9))
{
numbers = static_cast<Numbers^>(Enum::ToObject(Numbers::typeid, 9));
}
No.4
- 回答日時:
言語がC++/CLIであれば、enumの代わりにenum classを利用することで簡単に列挙子名を出力できます。
#1さんの例をenum classで書くと・・・
enum class Numbers
{
First=1,
Second,
Third,
Fourth,
Fifth,
Sixth,
Seventh
};
[STAThreadAttribute]
int main(array<System::String ^> ^args)
{
System::Enum^ numbers = Numbers::Fifth;
System::Console::WriteLine("Value is '{0}'", numbers->ToString());
return 0;
}
とか。
この回答へのお礼
お礼日時:2010/02/10 14:02
ありがとうございます。C++/CLIはいろいろとできるのですね。
VisualC++特有なのですね。
ところで、このようにすると、
numbers = 1;
とすると、変換できなくなるようです。Parse()とか使用できるかと調べてみましたが、できないですね。
数値をenumに変換して入力するにはどうすればよいのでしょうか?
No.3
- 回答日時:
基本的には無理です。
変数名と同じで、ソースコード上にのみ存在するので、コンパイルされてしまうと、失われてしまいます。
なので、なんらかの方法で、コンパイル後も情報が残るように工夫しなくてはなりません。
マクロを使うと、ある程度の省力化はできますが、数が多いとなかなか大変ですね。
No.2
- 回答日時:
C++ にはそもそも「ボックス化」が存在しないんだけど.... C++/CLI は知らん.
列挙子の範囲が 0以上かつ狭いなら
#define DefineEnumerator(x) x
enum Hoge {
DefineEnumerator(First),
DefineEnumerator(Second),
....
};
#undef DefineEnumerator
// ※
#define DefineEnumerator(x) #x
static const char *HogeStrings[] = {
DefineEnumerator(First),
DefineEnumerator(Second),
....
};
くらい. 値に制限がないなら std::map を使って上の※以降を
#include <map>
#define DefineEnumerator(x) { x, #x }
static const std::map<Hoge, const char *> HogeStrings = {
DefineEnumerator(First),
DefineEnumerator(Second),
....
};
か?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 数独の解法についてお聞きします 4 2023/05/25 17:15
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- オープンソース 【ChatGTPのオープンソースソフトウェアを解析したことがある方、教えてくださ 2 2023/03/08 18:57
- 数学 行列式について。 行列式の問題(手計算でできるもの)の中には文字が含まれていて尚且つn次行列式になっ 3 2023/02/21 23:42
- Excel(エクセル) Excelでの検索結果を含む行だけを表示させたい 5 2023/03/10 17:08
- スタンプ・絵文字・顔文字 PCに表示された内容(文字)をコピペすると・・・ 4 2022/10/12 16:18
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルでA列セル内で折り返すことなく、文字列を、B列C列・・・側に一行に 2 2022/07/23 02:02
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- WordPress(ワードプレス) Wordpressの記事URLを自由に決めたい 3 2022/06/02 12:05
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
構造体のデータを丸ごとコピー...
-
構造体から他の構造体への代入
-
Schemeのコンストラクタの引数は?
-
日付チェック関数について
-
API,PathIsDirectoryについて
-
Integer変数をカラにしたいので...
-
typedefをプログラム中で解除す...
-
aspでユーザー定義の構造体を作...
-
C言語 構造体の中に共用体を定...
-
FILE構造体がどのように定...
-
【VC++2005 MFC】構造体のコピ...
-
「#undef」と「#define」の使い...
-
ユーザー定義型変数の一括初期化
-
C++ 構造体の一括初期化 {0}
-
構造体を型の異なる構造体に代入
-
winsockのsendtoで送れるデータ型
-
なぜ?counterintuitive
-
C言語 配列の長さの上限
-
セグメントエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのプログラムで、DIAG = 1# ...
-
Integer変数をカラにしたいので...
-
C++ 構造体の一括初期化 {0}
-
構造体のデータを丸ごとコピー...
-
C言語 構造体の中に共用体を定...
-
「#undef」と「#define」の使い...
-
VBAにてcolorindexを変数に格納...
-
long型のデータをバイト型の配...
-
値が代入されてない時
-
異なる構造体のデータのコピー
-
構造体のポインタにNULLが入らない
-
VBAの変数のデータ型を変更する...
-
変数の初期化について
-
ユーザー定義型変数の一括初期化
-
構造体の初期化方法について
-
FILE構造体がどのように定...
-
charとucharの違い
-
typedefをプログラム中で解除す...
-
整数から16進数への変換 現在c...
-
VB.NETのStructureというのはど...
おすすめ情報