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;我从来没有见过这样的东西。
他们是怎么做到的?这个语法有名字吗?
这是面向人的商超负荷的函数呼叫的那把两串,这最可能看起来像 </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 |
这是在网上
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 >