gpt4 book ai didi

c++ - boost program_options 是如何工作的?

转载 作者:可可西里 更新时间:2023-11-01 18:04:23 26 4
gpt4 key购买 nike

对我来说奇怪的是,boost 的options_description 使用多行代码,没有反斜杠、分号或逗号。我做了一些研究,但一无所获。

(代码取自 official boost's tutorial ):

int opt;
po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
("optimization" , po::value<int>(&opt)->default_value(10), "optimization level")
("include-path,I ", po::value< vector<string> >() , "include path")
("input-file ", po::value< vector<string> >() , "input file") ;

它是如何实现的?是宏吗?

最佳答案

在 C++ 中这是一种奇怪的语法,但如果您熟悉 JS(例如),您可能会意识到方法链的概念。这有点像。

add_options()返回一个带有 operator() 的对象定义。第二行调用operator()在第一行返回的对象上。该方法返回对原始对象的引用,因此您可以继续调用 operator()连续多次。

这是其工作原理的简化版本:

#include <iostream>

class Example
{
public:
Example & operator()(std::string arg) {
std::cout << "added option: " << arg << "\n";
return *this;
}
Example & add_options() {
return *this;
}
};

int main()
{
Example desc;
desc.add_options()
("first")
("second")
("third");
return 0;
}

正如 gbjbaanb 指出的那样在评论中,这实际上与分配链接的方式非常相似 a = b = c = 0为类(class)工作。它也类似于使用 ostream::operator<< 时被认为是理所当然的行为。 :你希望能够做到std::cout << "string 1" << "string 2" << "string 3" .

关于c++ - boost program_options 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25014250/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com