在定义中使用 typedef 类型
Using typedef types in definition
我有一个class如下,
template<size_t N>
class A
{
typedef int(*ARRAY)[N];
array getArray();
ARRAY array;
};
那我如何在定义中使用类型ARRAY
呢?我试过这个
template<size_t N>
ARRAY A<N>::getArray()
{
return array;
}
但是,它告诉我 ARRAY
没有定义。
template<size_t N>
typename A<N>::ARRAY A<N>::getArray(){
return array;
}
ARRAY
是依赖名称,因此您需要在 class 范围之外使用 typename
keyword before 它。
template<size_t N>
typename A<N>::ARRAY A<N>::getArray()
//^^^^^^^^^^^^^
{
return array;
}
template<size_t N>
auto A<N>::getArray() -> ARRAY
// ^^^^^^^^^^^^^
{
return array;
}
此外,您的 class 成员声明中有错字。
array getArray();
应该是
ARRAY getArray();
但是,您有什么理由不想使用 std::array
?
问题在于您没有在命名空间中定义类型 ARRAY
,而是在 class 模板的范围内。因此,非限定查找找不到该名称的类型。
除了使用限定名称来引用此成员类型别名(如 Bill Lynch 的 所示),另一种方法是使用尾随 return 类型,在这种情况下,将在其中查找名称class 的上下文:
template<size_t N>
auto A<N>::getArray() -> ARRAY {
return array;
}
P.S。我强烈建议不要通过定义类型别名来混淆类型的指针性(或引用性),除非别名在泛型编程中使用,在这种情况下它可能被花哨的指针(或代理引用)替换。在这种情况下,别名通常应该被命名以表示它是一个“指针”(或“引用”),例如迭代器和分配器的类型别名及其在标准库中的类型特征。
我有一个class如下,
template<size_t N>
class A
{
typedef int(*ARRAY)[N];
array getArray();
ARRAY array;
};
那我如何在定义中使用类型ARRAY
呢?我试过这个
template<size_t N>
ARRAY A<N>::getArray()
{
return array;
}
但是,它告诉我 ARRAY
没有定义。
template<size_t N>
typename A<N>::ARRAY A<N>::getArray(){
return array;
}
ARRAY
是依赖名称,因此您需要在 class 范围之外使用 typename
keyword before 它。
template<size_t N>
typename A<N>::ARRAY A<N>::getArray()
//^^^^^^^^^^^^^
{
return array;
}
template<size_t N>
auto A<N>::getArray() -> ARRAY
// ^^^^^^^^^^^^^
{
return array;
}
此外,您的 class 成员声明中有错字。
array getArray();
应该是
ARRAY getArray();
但是,您有什么理由不想使用 std::array
?
问题在于您没有在命名空间中定义类型 ARRAY
,而是在 class 模板的范围内。因此,非限定查找找不到该名称的类型。
除了使用限定名称来引用此成员类型别名(如 Bill Lynch 的
template<size_t N>
auto A<N>::getArray() -> ARRAY {
return array;
}
P.S。我强烈建议不要通过定义类型别名来混淆类型的指针性(或引用性),除非别名在泛型编程中使用,在这种情况下它可能被花哨的指针(或代理引用)替换。在这种情况下,别名通常应该被命名以表示它是一个“指针”(或“引用”),例如迭代器和分配器的类型别名及其在标准库中的类型特征。