可选的传递对象通过引用来起作用

时间:2017-03-16 20:28:45

标签: c++ reference parameter-passing boost-optional

我有很多调用只接受一个参数的函数,我不想更新这些调用。但我想从其他特殊地方调用该函数,但在这种情况下,它还应该填充一个我将传递一些数据的向量。

我知道我可以使用指向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;
}

1 个答案:

答案 0 :(得分:0)

使用boost是否是基于您的偏好(或老板的偏好)的简单决定。

一旦你习惯了C ++,你会注意到你使用哪一个并不重要,只要你知道如何使用它们。