operator=
割り当てとブラケット アクセスの両方をサポートするクラス myVector を定義したいと考えています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
。この問題を解決するには、2 つの解決策しか考えられません。1 つは sth を定義することです。のようですdouble getValue(int i) const
が、重複したコードが追加されているため、これは奇妙に思えます。もう 1 つはconst
、関数の署名から削除する()
ことですが、これも望ましくありません。良い回避策があると確信していますが、見つけることができません。