template<typename T> class SomeClass{
public:
enum SomeEnum{ SOME_FLAG};
};
SomeClass::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass::SomeEnum::SOME_FLAG; //NO
SomeClass<int>::SomeEnum some_enum = SomeClass<int>::SomeEnum::SOME_FLAG; //YES
これはコンパイルされませんテンプレートパラメータ、ちょっとその列挙型そのクラスのグローバルなので、パラメータに依存しません。C++ - テンプレートパラメータ</p> </blockquote> <p>なしで使用</p> <blockquote> <p>クラス工assはなくて、それを使用する方法/回避策はありませんので、テンプレートパラメータなしのテンプレートクラスから使用列挙
私はそれらを入力することはできませんが、長くて複雑な場合があります。コードは読みにくく、ここではautoのようなものは使用できません。 (この質問はラメであれば、私はとても残念テンプレートに新たなんだ。)
なぜあなただけのクラス(テンプレート)外の列挙型を定義することはできませんか?名前空間のスコープで。 (あなたのプロジェクトにネームスペースがあることを願っています...) – Brian
@Brian単にクラス外で定義するだけで、プロジェクト内の他の列挙型の名前と競合する可能性があります。 (私が "enum SomeClass_SomeEnum {...}"と定義している場合を除きますが、それよりもエレガントなものが欲しかったです) – AdyAdy
@AdyAdy名前が矛盾しているという問題がある場合は、スコープ付き列挙型を使用できます。 – skypjack