调用模板化类内的枚举类枚举器的正确语法是什么
What is the correct syntax to call a enum class enumerators that are inside a templatized class?
我不知道如何从模板化类访问枚举类枚举器,无论是作为返回值还是只是一个值。正如您在以下示例中看到的那样,我完全不知道。我已经用谷歌搜索了错误消息,但没有运气。
很高兴你指出我正确的语法。
首先,这些是错误:
$ g++ -Wall -std=c++11 -o main.out main.cpp
main.cpp:25:1:错误:在"C::Values"之前需要"typename",因为"C"是依赖范围
C::值 C::Get((//<-- 此处出错... ^main.cpp:在函数 'int main((' 中:main.cpp:35:2:错误:"模板类 C"在没有模板参数的情况下使用
C::Values values;//<-- ...和这里
^
$
这是完整的示例,因此可以对其进行测试:
template<int Val>
class C
{
public:
enum class Values{ one, two };
C();
Values Get();
private:
int val;
};
template<int Val>
C<Val>::C() : val{ Val } {}
template<int Val>
C<Val>::Values C<Val>::Get() // <-- Error here ...
{
return Values::one;
}
int main(void)
{
C<5> aVariable;
C::Values values; // <-- ... and here
return 0;
}
提前谢谢你!!
你需要
帮助编译器告诉Value
是类型名:
template<int Val>
typename C<Val>::Values C<Val>::Get()
在第二种情况下,您还需要提供模板参数,例如 0
:
C<0>::Values values;
你可以阅读这个答案 官方,打字名有什么用? 以获得更多解释。
首先,您需要使用关键字 typename
作为依赖类型名称 C<Val>::Values
,例如
template<int Val>
typename C<Val>::Values C<Val>::Get()
~~~~~~~~
其次,你需要为类模板C
指定模板参数,例如
C<5>::Values values;
~~~
住
并查看我必须在哪里以及为什么必须放置"模板"和"类型名称"关键字?
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- 类似枚举的计算常量
- 如何正确实现和访问运算符的各种自定义枚举器
- 错误:从"int"到枚举c++的转换无效
- C++中构造函数中的枚举
- 访问在 C++ 结构中声明的枚举变量
- 枚举类'classname'的多重定义
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- typedef 枚举和枚举类有什么区别?
- 为什么我的开关/机箱在使用枚举时默认?
- 标准::可选枚举的比较运算符
- C++两个源文件之间共享的枚举的静态实例
- 调用模板化类内的枚举类枚举器的正确语法是什么
- 语法从父类访问枚举
- 带有“枚举类”的冗余语法
- 强类型枚举的语法实现错误
- Std库标题中的奇怪枚举语法
- 在包含windows.h:语法错误之后无法定义枚举
- 类型枚举_foo {a} foo的LZZ语法错误