【问题标题】:Optional passing object to function by reference可选地将对象通过引用传递给函数
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 2012-10-31
    • 2012-03-03
    • 2023-03-08
    • 2010-09-20
    • 1970-01-01
    • 2013-06-05
    相关资源
    最近更新 更多