2017-03-16 4 views
0

Ich habe viele Aufrufe an eine Funktion, die nur ein Argument benötigt, und ich möchte diese Aufrufe nicht aktualisieren. Aber ich möchte diese Funktion von einem anderen speziellen Ort aus aufrufen, aber in diesem Fall sollte sie zusätzlich einen Vektor füllen, den ich mit einigen Daten übergeben werde.Optionales passierendes Objekt, das durch Referenz funktioniert

Ich weiß, ich kann ein Standardargument mit NULL Zeigern auf einen std::vector Container erstellen und dann, wenn es null ist, lassen Sie keine zusätzliche Aktionen zu tun, und wenn es ein gültiger Zeiger ist - sammeln Daten zu vector. Ich wollte jedoch versuchen, boost::optional zu verwenden.

Bitte beachten Sie den folgenden Code. Es kompiliert und funktioniert, aber ist dieser Ansatz in Ordnung, oder sollte ich das nicht tun und lieber rohen Zeiger verwenden?

#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/ könnte besser geeignet sein. – Jarod42

+1

Es ist nichts Falsches daran, einen Zeiger in diesem Fall zu übergeben, warum sollte er komplizierter werden? – keith

+0

@ Jarod42, Danke, beim nächsten Mal werde ich daran denken, Code-Bewertungen dort zu schreiben. keith, weil ich über Boost :: optionales Konzept vor einiger Zeit gehört habe und wenn ich es nicht benutze, so werde ich es wahrscheinlich vergessen. Und wenn ich es in irgendeiner Funktion implementiere, werde ich mich daran erinnern, wenn es nützlicher sein wird. – user7242858

Antwort

0

Mit boost oder nicht ist eine einfache Entscheidung auf der Grundlage Ihrer Präferenzen (oder Vorlieben Ihres Chefs).

Sobald Sie sich an C++ gewöhnt haben, werden Sie feststellen, dass es egal ist, welche Sie verwenden, solange Sie wissen, wie man sie benutzt.

Verwandte Themen