2017-03-16 9 views
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; 
} 
+0

http://codereview.stackexchange.com/より適切かもしれません。 – Jarod42

+1

このインスタンスにポインタを渡すことに何も問題はありません、なぜそれを複雑にしますか? – keith

+0

@ Jarod42、 ありがとうございます、次回はコードレビューを投稿することを忘れないでください。 keith、 私はboost :: optionalコンセプトについて聞いたことがありますので、私はそれを使用しないのでおそらく私はそれを忘れるでしょう。そして、もし私がそれをいくつかの関数で実装すれば、もっと便利になると思います。 – user7242858

答えて

0

は、あなたの好み(または上司の好み)に基づく単純な決定です。

C + +に慣れると、使用方法がわかっている限り、どちらを使用するかは重要ではありません。

関連する問題