enumをclassの外で定義するには?

解決


mon  2005-04-26 07:04:34  No: 57186

class の 外に enumをおきたいのですが出来ますか?

例えば、

class C01
{
public:
 enum Flags
 {
    F1 = 1,
    F2 = 4,
 };
};

とするのが通常だと思いますが、

class C01
{
public:
   enum Flags;
};

enum C01::Flags
{
   F1 = 1,
   F2 = 4,
};

のように定義したいです。構造体等も外で定義したいのですが出来ますか?
内部クラスや内部構造体を定義するとどうしてもヘッダが長くなってしまうので
それを避けたいです。


dark  2005-04-26 07:15:48  No: 57187

>class の 外に enumをおきたいのですが出来ますか?
ここで尋ねる前に試してみましたか?
それとも試せる環境が今はないとか?


YuO  2005-04-26 07:53:45  No: 57188

Microsoft言語拡張を許す場合にはコンパイル可能ですが,
言語拡張を切った場合,コンパイル不可能です。
#VC++ 2003 Toolkit付属のコンパイラ(13.10.3077)で確認。

ISO/IEC 14882:2003によると,
> enum-specifier:
>     'enum' identifier(opt) '{' enumerator-list(opt) '}'
となっています。
#7.2 Enumeration declarations

標準では許さないのですから,コンパイルが通るからといって,使うべきではないと思います。

ちなみに,クラスでは,
> class-specifier:
>     class-head '{' member-specification(opt) '}'
> class-head:
>     class-key identifier(opt) base-clause(opt)
>     class-key nested-name-specifier identifier base-clause(opt)
>     class-key nested-name-specifier(opt) template-id base-clause(opt)
> class-key
>     'class'
>     'struct'
>     'union'
となっています。
#9 Classes


mon  2005-04-26 08:54:55  No: 57189

darkさん
  一応コンパイルはしてみたのですが通らなかったので質問しました。

YuOさん
  仕様上やはり無理なようですね。ありがとうございます。

ありがとうございました。


WIZ  2005-04-26 17:52:54  No: 57190

解決ではないですが、namespace を使ってまとめるのはどうでしょう?
C01::Class とか C01::Flags とかして名前の衝突は避けることができるようになります。

namespace C01
{
   class Class
   {
   public:
      enum Flags;
   };

   enum Flags
   {
     F1 = 1,
     F2 = 4,
   };
}


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加