【发布时间】:2017-08-08 05:22:52
【问题描述】:
我对一个只接受一个参数的函数进行了多次调用,我不想更新这些调用。但我想从其他一些特殊的地方调用该函数,但在这种情况下,它应该另外填充一个向量,我将传递一些数据。
我知道我可以使用指向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;
}
【问题讨论】:
-
codereview.stackexchange.com 可能更合适。
-
在这种情况下传递指针并没有错,为什么要复杂化呢?
-
@Jarod42,谢谢,下次我会记得在那里发布代码审查。 keith,因为我前段时间听说过 boost::optional 概念,如果我不使用它,我可能会忘记它。如果我在某个函数中实现它,那么当它更有用时我会记住它。
标签: c++ reference parameter-passing boost-optional