私は自分のクラスを作っています。タイトルのように初期化できるようにしたいと思います。
a = {x, y};
その方法を教えてくれるものを見つけることができませんでした。
私は自分のクラスを作っています。タイトルのように初期化できるようにしたいと思います。
a = {x, y};
その方法を教えてくれるものを見つけることができませんでした。
実際に (初期化ではなく) そのように代入できるようにしたい場合は、 をオーバーロードする必要がありますoperator=
が、その引数の型は、中括弧内のリストが何を表しているかによって異なります。
たとえば、常に値のペアを渡す場合は、次の値operator=
を取るオーバーロードを使用できstd::pair
ます。
A& operator=(std::pair<int, int>);
これは次のように呼び出し可能です。
A a;
a = {5, 3};
任意の長さのリストを渡せるようにしたい場合は、引数の型を次のようにすることができますstd::initializer_list
。
A& operator=(std::initializer_list<int>);
これで、次のすべてが問題ありません。
a = {};
a = {1, 2};
a = {5, 3, 5, 2, 3};
C++11 以降では、std::initializer_listテンプレート クラスをパラメーターとして使用してコンストラクターを作成するだけでそれを行うことができ、同様の方法でoperator=をオーバーロードできます。ただし、C++03またはC++98でそれを行うトリックは知りません。
ウィキペディアからのコピペ:
class SequenceClass {
public:
SequenceClass(std::initializer_list<int> list);
};