強く型付けされたenum(enumクラス)をテンプレートパラメータの中で宣言したいと思います。厳密に型指定されたenumを "enum class"で参照することはできないため、すでに定義されている場合は機能しません。テンプレートパラメータ内の前方宣言クラスenum?
ファイル2が列挙型の定義を認識しない可能性があるため、これを実行します。これをどうやって解決するのですか?
がコンパイル:
は// File 1
template<typename TEnum>
class TSomeClass
{
int m_someMember;
};
// File 2
struct MyStruct
{
TSomeClass<enum class MyEnum : int> someClassInstance;
};
enum class MyEnum : int
{
someIdentifier
};
はコンパイルされません:
// File 1
template<typename TEnum>
class TSomeClass
{
int m_someMember;
};
enum class MyEnum : int
{
someIdentifier
};
// File 2
struct MyStruct
{
TSomeClass<enum class MyEnum : int> someClassInstance;
//^ error: "reference to scoped enumeration must use 'enum' not 'enum class'"
};
がいずれかのコンパイルされません:
// File 1
template<typename TEnum>
class TSomeClass
{
int m_someMember;
};
// File 2
struct MyStruct
{
TSomeClass<enum MyEnum : int> someClassInstance;
};
enum class MyEnum : int
//^ error: "enumeration previously declared as unscoped"
{
someIdentifier
};
を追加注意として、Visual Studioで動作するようです2015. しかし、Clang 4.0.0では「スコープ付き列挙への参照は「enum」を使用する必要があります。 'enum class'ではありません。
編集:私は、(テンプレートパラメータの外にある)enumの通常の前方宣言の代替方法を探しています。 構造体/クラスの前方宣言は、テンプレートパラメータ内でうまく動作しますが、なぜ "enum class"では動作しませんか?
テンプレートパラメータの内側にそれを行うのはなぜ? –
私の返信をJarod42と私の編集を参照してください。 – kokole