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;
}
http://codereview.stackexchange.com/ könnte besser geeignet sein. – Jarod42
Es ist nichts Falsches daran, einen Zeiger in diesem Fall zu übergeben, warum sollte er komplizierter werden? – keith
@ 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