gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:20:17 25 4
gpt4 key购买 nike

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

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

那么我到底写错了什么?

最佳答案

参见 When is the "typename" keyword necessary? .

无论如何,你们非常亲密。修复后(加上一些错别字):

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 { /**/ }

关于c++ - 单独定义模板化嵌套类方法的正确语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52959425/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com