0
1つの引数を取る関数への呼び出しがたくさんあり、それらの呼び出しを更新したくありません。しかし、私は他の特別な場所からその関数を呼び出すことができますが、その場合は、いくつかのデータを渡すベクトルをさらに埋めてください。オプションでオブジェクトを参照渡しで渡す
私はstd::vector
コンテナにNULL
ポインタとデフォルトの引数を作成し、それがnullの場合、次に、余分なアクションをやってスキップすることができます知っていて、それが有効なポインタである場合 - vector
にデータを収集します。しかし、私はboost::optional
を使ってみたかったです。
下記のコードをご覧ください。それはコンパイルされ、動作しますが、このアプローチはうまくいきますか、それをやってはいけません。 boost
かどうかを使用して
#include <boost/optional.hpp>
#include <boost/none_t.hpp>
#include <vector>
//header file declaration
int doAction(
int value,
char *msg = NULL,
boost::optional<std::vector<int>&> optionalNumberVec = boost::none);
//main.cpp
int doAction(int value, char* msg, boost::optional<std::vector<int>&> optionalNumberVec)
{
//do main actions here
//...
//...
//end of main action
//get additional information to table
if (optionalNumberVec)
{
optionalNumberVec.get().push_back(5);
optionalNumberVec.get().push_back(3);
}
return 1;
}
int main()
{
std::vector<int> numVec;
boost::optional<std::vector<int>&> optionalNumberVec(numVec);
doAction(2);
doAction(2, NULL, optionalNumberVec);
return 0;
}
http://codereview.stackexchange.com/より適切かもしれません。 – Jarod42
このインスタンスにポインタを渡すことに何も問題はありません、なぜそれを複雑にしますか? – keith
@ Jarod42、 ありがとうございます、次回はコードレビューを投稿することを忘れないでください。 keith、 私はboost :: optionalコンセプトについて聞いたことがありますので、私はそれを使用しないのでおそらく私はそれを忘れるでしょう。そして、もし私がそれをいくつかの関数で実装すれば、もっと便利になると思います。 – user7242858