【发布时间】:2012-03-30 21:06:30
【问题描述】:
我想定义一个 myVector 类,它支持赋值 operator= 和括号访问,例如 myclass(1) = 0.5。请参阅下面的虚拟示例
class myVector
{
public:
vector<double> _v;
myVector(unsigned int size) : _v(size, 0) { }
double& operator()(int i)
{
return _v[i];
}
unsigned int size() const { return _v.size(); }
myVector& operator=(const myVector& v)
{
_v.resize(v.size());
for(int i=0;i<v.size();i++)
_v[i] = v(i);
}
}
此代码无法编译,因为() 未定义为常量函数。这是因为我想启用直接分配,例如myvector(1) = 2。要解决这个问题,我只能想到两个解决方案。一是定义某事。就像double getValue(int i) const 一样,但这看起来很奇怪,因为添加了一些重复的代码。另一种是从() 函数的签名中删除const,但这也是不可取的。我相信会有一个很好的解决方法,但我找不到它。
【问题讨论】:
-
为什么这么复杂 - 你可以说
_v = v;,或_v.swap(v);。 -
那些圆括号叫“小括号”,算子叫“函数调用算子”
-
这几乎与之前的问题完全相同。 stackoverflow.com/questions/5762042/…。 My answer 也适用于此。
标签: c++ function-call-operator