我有很多调用只接受一个参数的函数,我不想更新这些调用。但我想从其他特殊地方调用该函数,但在这种情况下,它还应该填充一个我将传递一些数据的向量。
我知道我可以使用指向NULL
容器的std::vector
指针创建默认参数,然后,如果它为null,则跳过执行任何额外操作,如果它是有效指针,则收集数据到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 :(得分:0)
使用boost
是否是基于您的偏好(或老板的偏好)的简单决定。
一旦你习惯了C ++,你会注意到你使用哪一个并不重要,只要你知道如何使用它们。