2013-07-24 28 views
5

私はこのような列挙型を持っている:私が行うことができるように、私はグローバル名前空間にmy_trueを公開できるようにしたいと思いのtypedefと列挙型または列挙型クラス

enum class truth_enum { 
    my_true = 1, 
    my_false = 0 
}; 

、(実際には、列挙型クラスがあります)この:

char a_flag = my_true; 

あるいは、少なくとも、この代わりの

char a_flag = (char)my_true; 

char a_flag = truth_enum::my_true; 

これは可能ですか?私はこのような何かを試してみました

は:

typedef truth_enum::my_true _true_; 

私はエラーが表示されます。列挙型クラスtruth_enumでmy_trueは私の推測では、値がないタイプmy_trueであるということであるタイプ

に名前を付けていません。自分のプログラムでこの機能を有効にするための方法がありますか?

ない理想的な、しかし、私のような何かを行うことができます:

enum class : const char { ... }; 
const char const_flag_false = truth_enum::my_false; 

をうーん...

+0

(...の人が編集できるように、コミュニティのwikiをメイド)。冗長性は、読みやすさを妨げない限り問題にはなりません。 – yngccc

+0

'enum class'の列挙子は暗黙的に整数に変換されないので、' char a_flag = my_true; 'は間違っています。 –

+0

私はコンバートを上記のように使用しました – user3728501

答えて

1

enum定義からclassを削除します。 intに暗黙的に変換されて怒られていると思います。どの程度:

static constexpr truth_enum _true_ = truth_enum::my_true; 
static constexpr truth_enum _false_ = truth_enum::my_false; 

または単に

const truth_enum _true_ = truth_enum::my_true; 
const truth_enum _false_ = truth_enum::my_false; 
+0

これを調べてみましょう覚えている間に私のコードを修正する必要があります – user3728501

+0

静的なcontexprは何をしますか?実際、contexprは何をしていますか? – user3728501

+0

'constepxr'が変数に適用されると' const'になり、コンパイル時にコンパイラが初期化子を強制的に計算します。この具体的なケースでは、基本的に 'const'と同じです - 私はおそらくそれが動作する場所で派手な新しい構造を過度に使用していますが、実際には必要ではありません。 – Casey

0

ソリューションは簡単だった、私が作った間違いは、列挙型の代わりにenum classを使用することでした。

うん、そうまだ少し混乱し、実際に - 私は今だけのような値を使用することができます代わりにこれを実行することの

bool aboolean = (bool)my_true; 

を:

bool aboolean = (bool)truth_enum::my_true; 

これはなぜですか?あなたが列挙型クラスを使用する場合は、接頭辞を書いて避けることができない

+0

C++の列挙型は、Cから継承しています。これは、ほとんどプリプロセッサマクロです。このため、グローバルな名前空間に表示されます。 –