class の 外に enumをおきたいのですが出来ますか?
例えば、
class C01
{
public:
enum Flags
{
F1 = 1,
F2 = 4,
};
};
とするのが通常だと思いますが、
class C01
{
public:
enum Flags;
};
enum C01::Flags
{
F1 = 1,
F2 = 4,
};
のように定義したいです。構造体等も外で定義したいのですが出来ますか?
内部クラスや内部構造体を定義するとどうしてもヘッダが長くなってしまうので
それを避けたいです。
>class の 外に enumをおきたいのですが出来ますか?
ここで尋ねる前に試してみましたか?
それとも試せる環境が今はないとか?
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
darkさん
一応コンパイルはしてみたのですが通らなかったので質問しました。
YuOさん
仕様上やはり無理なようですね。ありがとうございます。
ありがとうございました。
解決ではないですが、namespace を使ってまとめるのはどうでしょう?
C01::Class とか C01::Flags とかして名前の衝突は避けることができるようになります。
namespace C01
{
class Class
{
public:
enum Flags;
};
enum Flags
{
F1 = 1,
F2 = 4,
};
}
ツイート | ![]() |