C++多个参数集在函数调用时有自己的括号?

Dan*_*dro 0 c++ function

我已经用C/C++编写了一段时间,我正在使用https://github.com/jarro2783/cxxopts库.该库使用add_options()函数来获取它的配置,如下所示:

options.add_options() ("option1", "Description1") ("option2", "Description2");
Run Code Online (Sandbox Code Playgroud)

您可以添加任意数量的选项.

令人惊讶的是,这是有效的C/C++并且有效; 我从来没有见过这样的东西.

他们是怎么做到的?这个语法有名称吗?

R S*_*ahu 5

options.add_options() 返回一个对象.

该对象具有函数调用操作符重载,它带有两个字符串,很可能看起来像

ObjectType& operator()(std::string const& option, std::string const& value);
Run Code Online (Sandbox Code Playgroud)

它允许您链接函数调用.

这是一个演示概念的简单程序.

#include <iostream>

struct Foo
{
   Foo& operator()(int x)
   {
      std::cout << "Got " << x << std::endl;
      return *this;
   }
};

struct Bar
{
   Foo getFoo() { return Foo(); }
};


int main()
{
   Bar b;
   b.getFoo()(10)(200)(30);
}
Run Code Online (Sandbox Code Playgroud)

计划的输出:

Got 10
Got 200
Got 30
Run Code Online (Sandbox Code Playgroud)

该行main相当于:

Foo foo = b.getFoo();
foo(10);
foo(200);
foo(30);
Run Code Online (Sandbox Code Playgroud)

PS

就个人而言,我发现编码风格有点神秘,最好避免.我宁愿看到:

auto& option = options.add_options();
option.addOption("option1", "Description1");
option.addOption("option2", "Description2");
Run Code Online (Sandbox Code Playgroud)

IMO,这一点要清楚得多.