2

クラスまたは関数を設計するとき、以下に示すように、どちらの方法が優れているのでしょうか。また、その理由は何ですか。

class Container {

    //Provide this functionality??
    void addItemVariadic(const Value& val, ...);

    //Or provide this functionality??
    void addItemList(const list<Value>& vals);

};

addItemVariadic(..)やaddItemList(..)のような関数を提供する方が良いですか?

または、イテレータをさらに取得するなど、そのような関数のセットを提供する方がよいのでしょうか、それとも、リストを取得するなど、機能を制限する方がよいのでしょうか。

4

1 に答える 1

2

可変個引数関数の使用は危険です

適切な型を持たない変数を渡すと、実行時に関数を呼び出すときにクラッシュします。

逆に、を使用するstd::listと、単純にコンパイルされず、クラッシュを回避できます。

ところで:この場合std::vectorの代わりに使用することをお勧めします。std::list

Edit1重複する 可能性のある質問。演算子<<を使用してすべてのパラメーターを一度に入力するという優れたソリューションを使用します。

Edit2異なるstd::containerから選択するために、この質問への回答として選択グラフがあります。このグラフはC++03で対応しており、C++1で導入された新しいコンテナはカバーしていません。

于 2013-01-18T12:33:29.593 に答える