我用C / C ++编写了一段时间,我正在使用https://github.com/jarro2783/cxxopts库。该库使用 add_options()函数来获取它的配置,如下所示:
options.add_options() ("option1", "Description1") ("option2", "Description2");
您可以添加任意数量的选项。
令人惊讶的是,这是有效的C / C ++并且有效;我从来没有见过这样的东西。
他们是怎么做到的?这个语法有名称吗?
答案 0 :(得分:5)
options.add_options()
返回一个对象。
该对象具有函数调用操作符重载,它接受两个字符串,很可能看起来像
ObjectType& operator()(std::string const& option, std::string const& value);
允许您链接函数调用。
这是一个演示概念的简单程序。
#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);
}
计划的输出:
Got 10
Got 200
Got 30
main
中的该行等同于:
Foo foo = b.getFoo();
foo(10);
foo(200);
foo(30);
<强> PS 强>
就个人而言,我发现编码风格有点神秘,最好避免。我宁愿看到:
auto& option = options.add_options();
option.addOption("option1", "Description1");
option.addOption("option2", "Description2");
IMO可以更清楚地理解这一点。