我想定義一個類myVector,它既支持分配operator=
,也支持括號訪問,例如myclass(1) = 0.5
。看到此代碼因爲()
不能被編譯沒有被定義爲常數函數下面C++中的過載分配和圓括號運算符
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);'。 – 2012-03-30 21:08:01
那些圓括號被稱爲「括號」,並且操作員被稱爲「函數調用操作」 – 2012-03-30 21:09:07
這是較早的問題幾乎如出一轍。 http://stackoverflow.com/questions/5762042/const-overloaded-operator-function-and-its-invocation/5762323。 [我的回答](http://stackoverflow.com/a/5762323/179910)也適用於此。 – 2012-03-30 21:17:45