我已经用C/C++编写了一段时间,我正在使用https://github.com/jarro2783/cxxopts库.该库使用add_options()函数来获取它的配置,如下所示:
options.add_options() ("option1", "Description1") ("option2", "Description2");
Run Code Online (Sandbox Code Playgroud)
您可以添加任意数量的选项.
令人惊讶的是,这是有效的C/C++并且有效; 我从来没有见过这样的东西.
他们是怎么做到的?这个语法有名称吗?
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,这一点要清楚得多.
| 归档时间: |
|
| 查看次数: |
116 次 |
| 最近记录: |