【发布时间】:2016-01-04 06:36:12
【问题描述】:
我正在尝试超载operator=(),但我得到了error: no viable overloaded '='。但我不明白为什么。我在这里想念什么?我厌倦了Overloading assignment operator in a class template that can cast to another template type 中的答案,但有人说要给返回类型的模板参数一个新类型......?这导致编译器为我抱怨未知类型。
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();
}
【问题讨论】:
-
FWIW,你不需要在类模板中使用
SomeClass<T, P>。您可以只使用SomeClass。 -
不相关,但运算符定义中的
<T, P>不是必需的。而且您实际上不需要实现赋值运算符。 -
顺便说一句,实现可以简单地是
{ vectorfield = src.vectorfield; return *this; }甚至SomeClass& operator=(const SomeClass& rhs) = default;
标签: c++ templates assignment-operator