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

C++ multiple sets of parameters with their own parentheses on function call?

我已经在C/C++中编码了一段时间,我使用的是HTTPS://Github. COM/JARRO2583/CXXOPTS库。库使用add_options()函数获取其配置,如下所示:

1
options.add_options() ("option1","Description1") ("option2","Description2");

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

令人惊讶的是,这是有效的C/C++和Work;我从来没有见过这样的东西。

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


options.add_options()时返回的对象。 </P >

这是面向人的商超负荷的函数呼叫的那把两串,这最可能看起来像 </P >

1
ObjectType& operator()(std::string const& option, std::string const& value);

这允许你到链中的函数调用。 </P >

这是一个简单的程序,demonstrates的概念。 </P >

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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);
}

输出的程序: </P >

1
2
3
Got 10
Got 200
Got 30

这是在网上main是等价的: </P >

1
2
3
4
Foo foo = b.getFoo();
foo(10);
foo(200);
foo(30);

PS </P >

personally,I find的那一位的编码方式的研究cryptic和最佳avoided。。。。。。。而我会看到: </P >

1
2
3
auto& option = options.add_options();
option.addOption("option1","Description1");
option.addOption("option2","Description2");

这是一个很多clearer了解到,国际海事组织(IMO)。 </P >