模板类的重载赋值操作符
overload assignment operator for template class
我正在尝试超载operator=()
,但我正在获得error: no viable overloaded '='
。但我不明白为什么。我遗漏了什么?在类模板中重载赋值操作符可以强制转换为另一种模板类型,但有人说要给返回类型的模板参数一个新类型…? 这将导致编译器向我抱怨未知类型。
template<typename T, typename P>
class SomeClass
{
public:
SomeClass<T, P> operator=(SomeClass<T, P>& src)
{
if (this != &src)
{
vectorfield.resize(src.vectorfield.size());
for (int i = 0; i < src.vectorfield.size(); ++i)
{
vectorfield[i] = src.vectorfield[i];
}
}
return *this;
}
private:
std::vector<std::vector<std::string>> vectorfield;
};
template<typename SC>
class SomeOtherClass
{
public:
typedef SC someclass_type;
void func()
{
sc = someclass_type();
}
private:
someclass_type sc;
};
int main()
{
typedef SomeClass<int, int> SCII;
typedef SomeOtherClass<SCII> SOC_scii;
SOC_scii soc_scii;
soc_scii.func();
}
使用临时文件,如
sc = someclass_type();
赋值操作符的形参必须是一个const
引用。
SomeClass<T, P>& operator=(const SomeClass<T, P>& src)
^ ^^^^^
赋值操作符通常也返回对被赋值对象的引用(因此它可以用于链式赋值,如a = b = c;
)。按值返回将创建一个额外的副本,这可能是我们不希望看到的。
只需将赋值操作符的签名更改为:
SomeClass<T, P>& operator=(SomeClass<T, P> const &src)
^ ^^^^^
你必须通过引用返回来允许赋值链,如下所示:
SomeClass<T, P> a, b, c;
a = b = c;
输入参数必须是const
引用,否则你将无法分配临时对象
相关文章:
- c++中的重载赋值操作符
- 复制构造函数,赋值操作符重载
- c++复制构造函数,重载赋值操作符,方法get()
- 赋值操作符重载
- 当类是子类时重载赋值操作符
- 模板类的重载赋值操作符
- 使用重载赋值操作符
- 类和向量的重载赋值操作符
- 在可强制转换为另一个模板类型的类模板中重载赋值操作符
- 无法重载赋值操作符
- c++ const重载赋值操作符机制
- 创建了自己的字符串类——重载赋值操作符和析构函数的错误
- 在重载赋值操作符内调用构造函数
- 使用重载赋值操作符克隆单链表
- 类型演绎的重载赋值操作符
- 重载赋值操作符,留下基本功能
- 重载赋值操作符总线错误
- 退出重载赋值操作符将调用析构函数来删除对象
- 重载赋值操作符而不知道类结构
- 重载赋值操作符和其他操作符的区别是什么?