2017-03-16 44 views
0

我有一個函數,只有一個參數,我不想更新這些調用很多調用。但是我想從其他一些特殊的地方調用這個函數,但是在這種情況下,它應該另外填充一個我將傳遞一些數據的向量。可選的傳遞對象通過引用功能

我知道我可以創建NULL指針默認參數爲std::vector容器內,然後,如果是空,跳過做任何額外的操作,如果它是一個有效的指針 - 收集數據,vector。不過,我想嘗試使用boost::optional

請參閱下面的代碼。它編譯和工作,但這種方法是好的,或者我不應該這樣做,並更好地使用原始指針?

#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

使用boost與否是根據你的喜好(或你的老闆的喜好)一個簡單的決定。一旦你習慣了C++,你會注意到,只要你知道如何使用它,那麼你使用哪一個並不重要。