カンマを使用したアプローチは次のとおりです。
#include <iostream>
using namespace std;
struct Matrix {
struct Adder {
Matrix& m;
int index;
Adder(Matrix& m) : m(m), index(1) {}
Adder& operator,(float value) {
m.set(index++, value);
return *this;
}
};
void set(int index, float value) {
// Assign value to position `index` here.
// I'm just printing stuff to show you what would happen...
cout << "Matrix[" << index << "] = " << value << endl;
}
Adder operator<<(float value) {
set(0, value);
return Adder(*this);
}
};
デモ: http: //ideone.com/W75LaH
いくつかの説明:
構文matrix << 5, 10, 15, 20
は2つのステップで実現されます。
matrix << 5
最初に評価されます。最初の要素を5に設定し、それ以降の挿入を処理する一時Adder
オブジェクトを返します(次の挿入のインデックスを記憶します)
Adder
operator,
各コンマの後に次の挿入を実行するオーバーロードがあります。