1

私は自分のクラスを作っています。タイトルのように初期化できるようにしたいと思います。

a = {x, y};

その方法を教えてくれるものを見つけることができませんでした。

4

2 に答える 2

5

実際に (初期化ではなく) そのように代入できるようにしたい場合は、 をオーバーロードする必要があります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};
于 2013-05-03T11:38:28.763 に答える
1

C++11 以降では、std::initializer_listテンプレート クラスをパラメーターとして使用してコンストラクターを作成するだけでそれを行うことができ、同様の方法でoperator=をオーバーロードできます。ただし、C++03またはC++98でそれを行うトリックは知りません。

ウィキペディアからのコピペ:

class SequenceClass {
public:
    SequenceClass(std::initializer_list<int> list);
};
于 2013-05-03T11:37:37.357 に答える