我想在模板参数中转发声明一个强类型枚举(枚举类)。如果它已经定义,它就不起作用,因为强类型的枚举不能被" enum class"引用。
我想这样做,因为文件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给了我&#34;对范围枚举的引用必须使用&#39; enum&#39;没有&#39; enum class&#39;&#34;
编辑:我正在搜索枚举的常规前向声明(可能在模板参数之外)的替代方法。 结构/类的前向声明在模板参数内工作正常,为什么它们不能用于&#34; enum class&#34;?
答案 0 :(得分:0)
您可以先转发枚举声明:
enum class MyEnum : int;
struct MyStruct
{
TSomeClass<MyEnum> someClassInstance;
};