单独定义模板化嵌套类方法的正确语法

Correct syntax for separate definition of templated nested class methods

本文关键字:语法 类方法 嵌套 定义 单独      更新时间:2023-10-16

我正在编写一个类,除了作为允许不同数字类型的模板之外,还需要一个额外的嵌套类:

template<typename _type>
class myClass{
// ...
class myNestedClass{
myNestedClass(int v1, int v2);
myNestedClass& operator= (std::vector<int> _vals);
operator std::vector<_type>() const;
// ...
}
// ...
template <typename _input_type> operator*= (_input_type _val);
// ...
}

我已经掌握了大部分语法,特别是如何在类定义后定义方法:

template <typename _type> 
template <typename _input_type>
myClass<_type>& myClass<_type>::operator*=(_input_type _val){ /* */ };

但我无法对嵌套类方法遵循相同的方案:

template <typename _type> 
myClass<_type>::myNestedClass::myNestedClass(int v1, int v2) { /* */ };
template <typename _type> 
myClass<_type>::myNestedClass& 
template <typename _type> myClass<_type>::myNestedClass::operator= (std::vector<int> _vals) { /* */ }
template <typename _type> 
myClass<_type>::myNestedClass::operator std::vector<_type> () const { /**/ };

但是编译器抱怨最后两个方法定义,error: need 'typename' before 'myClass<_type>::myNestedClass' because 'myClass<_type>' is a dependent scope

那么我在这里到底写错了什么?

请参阅何时需要"typename"关键字?。

无论如何,你离得很近。修复后(加上一些错别字(:

template<typename _type>
class myClass{
// ...
class myNestedClass{
myNestedClass(int v1, int v2);
myNestedClass& operator= (std::vector<int> _vals);
operator std::vector<_type>() const;
// ...
};
// ...
template <typename _input_type> myClass<_type>& operator*= (_input_type _val);
// ...
};
template <typename _type> 
template <typename _input_type>
myClass<_type>& myClass<_type>::operator*=(_input_type _val){ /* */ }
template <typename _type>
myClass<_type>::myNestedClass::myNestedClass(int v1, int v2) { /* */ }
template <typename _type> 
typename myClass<_type>::myNestedClass& myClass<_type>::myNestedClass::operator= (std::vector<int> _vals) { /* */ }
template <typename _type> 
myClass<_type>::myNestedClass::operator std::vector<_type> () const { /**/ }