如何使用boost :: optional传递可选的输入参数

lea*_*ode 3 c++ boost

如何使用带有boost :: optional参数列表的API?我还没有找到任何谈论输入参数的文档,

不谈论如何处理输入参数.请让我知道我错过了什么.

这里是

void myMethod(const boost::optional< std::string >& name,
const boost::optional< std::string >& address,
const boost::optional< boost::string >& description,
const boost::optional< bool >& isCurrent,
const boost::optional< std::string >& ProductName,
const boost::optional< std::string >& Vendor)
Run Code Online (Sandbox Code Playgroud)

鉴于此,我该如何称呼它?myMethod(,,,,x,y)不工作

Dre*_*ann 12

对于如下功能:

void myMethod( boost::optional<int>, boost::optional<double> );
Run Code Online (Sandbox Code Playgroud)

您可以传递boost::none任何boost::optional参数来指定"none":

myMethod( boost::none, 1.0 );
Run Code Online (Sandbox Code Playgroud)

在C++ 11或更高版本中,显式默认构造对象的输入更少.

myMethod( {}, 1.0 );
Run Code Online (Sandbox Code Playgroud)

如果要完全省略对参数的任何提及,则C++仅指定参数后才需要默认参数.

void myMethod( boost::optional<int> = boost::none_t,
               boost::optional<double> = boost::none_t );

myMethod( 42 ); // (The second parameter will be boost::none_t
Run Code Online (Sandbox Code Playgroud)

您需要使用不同的参数排序重载您的函数,以允许省略任何参数.

void myMethod( boost::optional<int> = boost::none_t,
               boost::optional<double> = boost::none_t );

// Alternate parameter ordering
void myMethod( boost::optional<double> d,
               boost::optional<int> i = boost::none_t )
{
    myMethod( i, d );
}

myMethod( 1.0 ); // (The "int" parameter will be boost::none_t
Run Code Online (Sandbox Code Playgroud)

  • 我不得不使用`boost :: none`来代替缺少的参数.[此](http://stackoverflow.com/questions/10934626/what-is-the-rationale-for-boostnone-t-implementation)帖子相关 (4认同)