草庐IT

optional

全部标签

c++ - boost::optional 不允许我重新分配 const 值类型

在我看来应该有四个变体boost::optionaloptional=>持有一个可变的Foo并且可以在初始化后重新分配optionalconst=>持有一个constFoo并且不能在初始化后重新分配optionalconst=>(应该?)持有一个可变的Foo但不能在初始化后重新分配optional=>(应该?)持有一个constFoo并且可以在初始化后重新分配前2个案例按预期工作。但是optionalconst取消对constFoo的引用,以及optional不允许在初始化后重新分配(如thisquestion中所述)。const值类型的重新分配是我遇到的具体问题,错误是:/usr/i

c++ - Clang 无法再使用 <functional> header 编译程序

我在运行ArchLinux的系统上使用clang版本4.0.0,它一直运行良好,但最近我无法再编译使用某些STLheader的程序了!详细信息:clang--version的输出:clangversion4.0.0(tags/RELEASE_400/final)Target:x86_64-unknown-linux-gnuThreadmodel:posixInstalledDir:/usr/bingcc--version的输出:gcc(GCC)7.1.120170528示例:我尝试编译以下简单程序:#includeintmain(){return0;}我正在使用以下命令:clang++

c++ - Boost Program_options 配置文件注释

我有一个程序使用boost::program_options从配置文件中读取大量变量。配置文件正在运行并读取值,但是由于文件中有很多选项,我想将它们记录在案。例如我希望配置文件看起来像:#Hereisadescriptionofflag1#flag1=truemeansblahblahblah#flag1=falsemeans...flag1=true#Hereisadescriptionofflag2...问题是我在任何地方都找不到描述执行此操作的方法的文档。我相当确定我可以使用诸如a=之类的东西对于我的评论分隔符,只需将所有评论分配给std::vector解析后被丢弃,但是我想知道

c++ - 如何在 C++ 中使用 std::optional

在C++17中引入了std::optional,我很高兴这个决定,直到我看到ref.我从Scala、Haskell和Java8知道Optional/Maybe,其中optional是一个monad并遵循monadic法则。C++17实现中不是这种情况。我应该如何使用std::optional,没有像map和flatMap/bind这样的函数,那是什么使用std::optional与例如返回-1或函数计算结果失败时的nullptr相比有优势吗?对我来说更重要的是,为什么std::optional没有设计成monad,有什么原因吗? 最佳答案

c++ - 返回带有 bool 结果标志的值的标准模板

当我开始利用C++17结构化绑定(bind)和ifoperatorinit语句来进行更优雅的函数结果报告和检查时,如果符合C++核心指南F21,我开始执行以下操作:std::pairFoo(){return{true,42};//truemeansthatfunctioncompletewithnoerrorandthat42isagoodvalue}voidmain(void){if(auto[Result,Value]=Foo();Result){//Dosomethingwiththereturnvaluehere}}然后,当然,我认为为此类返回类型提供一个可重用的模板会很好,这

c++ - Protocol Buffer : how nested (custom) optional fields are to be handled in C++?

读入ProtocolBufferBasics:C++,没有找到符合情况的东西:;以下.proto处理--cpp_out,messageA{requiredint32foo=1;}messageB{optionalAdata=1;}没有生成明显的访问器/setter来设置自定义可选字段(包括我懒得放在这里的“嵌套类型”部分)://accessors-------------------------------------------------------//optional.A=1;inlineboolhas_a()const;inlinevoidclear_a();staticcon

c++ - 在 Boost::Program_Options 中,如何设置 wstring 的默认值?

我的下面的代码没有工作:wstringconfig_file;//Declareagroupofoptionsthatwillbe//allowedonlyoncommandlinepo::options_descriptiongeneric("Genericoptions");generic.add_options()("help,h","producehelpmessage")("config,c",po::wvalue(&config_file)->default_value(L"DXDrv.cfg"),"nameofafileofaconfiguration.");编译失败,错

c++ - 使用 g++ 4.8 (Mac Ports) 在 Mac OS X 上编译 boost::program_options

我正在尝试编译boost::program_options示例之一,http://svn.boost.org/svn/boost/trunk/libs/program_options/example/first.cpp,使用gcc4.8(通过MacPorts安装)。但是,我不断收到错误消息:Undefinedsymbolsforarchitecturex86_64:"boost::program_options::to_internal(std::basic_string,std::allocator>const&)",referencedfrom:std::vector,std::a

c++ - 使用什么 std::optional 或 std::unique_ptr

我有一个包含动态分配成员的类(仅在使用时才分配)。这样想:classA{};classB{A*aMember;};用什么替换A*会更好:std::optional或std::unique_ptr?以及何时使用std::optional而不是std::unique_ptr 最佳答案 std::optional保证不会发生辅助内存分配。这意味着A类型的潜在对象的原始缓冲区嵌入到std::optional.它是std::optional的组成部分的内存占用。这意味着std::optional的内存大小总是至少为sizeof(A),无论是否

c++ - boost::program_options:如何忽略未知参数?

在boost::program_options库中,我无法理解如何让用户传递一个未通过add_options()添加的参数。我希望它被忽略,而不是终止程序。 最佳答案 今晚我遇到了完全相同的问题。@TAS的回答让我走上了正确的道路,但我还是花了20分钟的时间摸索着找出适合我的特定用例的确切语法。要忽略未知选项,而不是这样写:po::variables_mapvm;po::store(po::parse_command_line(argc,argv,desc),vm);po::notify(vm);我是这样写的:po::variabl