【发布时间】:2017-04-05 11:42:14
【问题描述】:
我想在模板参数中转发声明一个强类型枚举(枚举类)。如果它已经定义,则它不起作用,因为“枚举类”无法引用强类型枚举。
我想这样做是因为文件 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'”
编辑:我正在寻找通常的枚举前向声明的替代方法(这将在模板参数之外)。 结构/类的前向声明在模板参数中工作正常,为什么它们不适用于“枚举类”?
【问题讨论】:
-
为什么要在模板参数里面?!
-
查看我对 Jarod42 的回复和我的编辑。
标签: c++