Предположительно add_options () возвращает какой-то функтор, у которого перегружен operator () для поддержки "цепочки" (кстати, очень полезный метод)
Перегрузка (...) позволяет вам создать класс, который действует как функция.
Например:
struct func
{
int operator()(int x)
{
cout << x*x << endl;
}
};
...
func a;
a(5); //should print 25
Однако, если вы заставите operator () возвращать ссылку на объект , вы можете "связать" операторы.
struct func
{
func& operator()(int x)
{
cout << x*x << endl;
return *this;
}
};
...
func a;
a(5)(7)(8); //should print 25 49 64 on separate lines
Поскольку a (5) возвращает a, (a (5)) (7) более или менее идентично a(5); a(7);
.