我对一个只需要一个参数的函数有很多调用,我不想更新这些调用。但是我想从其他一些特殊的地方调用该函数,但在这种情况下,它应该另外填充一个向量,我将传递一些数据。
我知道我可以创建一个带有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;
}