0

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

我知道我可以创建一个带有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;
}
4

1 回答 1

0

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

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

于 2017-03-16T20:46:35.503 回答