草庐IT

handling-boolean-flag-options

全部标签

c++ - boost::program_options 如何重新加载一个值

我想从配置文件中重新加载一些值。我知道po::store不会更改存在于variables_map中的值。有没有替代方案可以替换值,即使它们已经存在?我尝试删除即将从variables_map重新加载的值,但是po::store无论如何都不会添加新值(即使旧值不能都可以访问)。 最佳答案 P3trus的解决方案涉及向下转换。这是必要的,因为variables_map重载了std::map::operator[]返回一个constvariable_value&(const防止重新分配)。但是在C++11中我们有std::map::at(

c++ - OpenCV 2.4.2 错误 "OpenCV Error: Bad flag"

我刚开始尝试使用OpenCV,并且根据一本书编写了一个非常简单的小程序。问题是当我尝试编译它时,出现此错误。我会告诉你我所有的信息。我使用Homebrew软件为MacOSX10.7安装了openCV。#include#includeintmain(intargc,char*argv[]){cv::Matimage=cv::imread("usf.gif");cv::namedWindow("MyImage");cv::imshow("MyImage",image);cv::waitKey(5000);return1;}我喜欢这样编译:g++-otestopencvtest.cc-lop

c++ - 将 MS HANDLE 初始化为 nullptr 是否安全?

我知道使用nullptr更“类型化”。它可以区分指针类型和0,在函数重载和模板特化方面表现良好。所以我不确定在每个HANDLE/的旧Win32项目中将NULL替换为nullptr是否安全>HWND/HINSTNACE初始化用法?任何建议都会有所帮助。谢谢 最佳答案 对于解析为指针类型的句柄,您可以使用nullptr而不是NULL。大量句柄类型被typedef定义为指针,因此您应该不会遇到太多问题。这不意味着可以使用NULL或nullptr。一些调用返回INVALID_HANDLE_VALUE,在VS2013中定义为((HANDLE)

c++ - 普通默认可构造的 std::optional 和 std::variant

可以设计吗std::optional(当前std::experimental::optional)以这种方式,对于普通的默认可构造类型T对应std::optional也是默认可构造的吗?同样的问题重新阅读std::variant及其积分判别器。我自己的回答是:“不行,不能这么设计,因为如果对象有自动存储期,或者是非reinterpret_cast-ed,默认初始化时得到的它的整数鉴别器的值是不确定的-零初始化存储。”要求用户每次都进行值初始化在我看来是不允许的。 最佳答案 您的回答是正确的:不能。规范要求在默认构造时将其“初始化标志

c++ - double not (!!) 用于非 boolean 变量有什么作用?

这个问题在这里已经有了答案:关闭11年前。PossibleDuplicate:DoubleNegationinC++code.我正在处理生产代码,我在其中遇到过几次这样的语句:Class.func(!!notABool);前几次我认为它是程序员的怪癖(也许是为了强调它是一个条件语句而不是传递给func的数字?)但我遇到过几个语句使用上面的内容,现在我想知道它是否真的有所作为。在大多数情况下,notABool是一个数字(int、float、double...我已经看到了所有3个)我最初的猜测是它类似于打字:Class.func((bool)notABool);但我不完全确定?

C++ 设计 : functions with boolean options

我有一个关于C++中“良好设计实践”的问题。我正在用C++11编写一个数字库,我使用了很多元编程和基于模板的技术。但我有一个非常基本的问题:考虑一个函数,它可以有两个非常接近的行为,除了一个可以由boolean标志激活的选项。我只考虑一个可以由开发人员设置/取消设置的标志,而不是一个可以在运行时设置/取消设置的标志。设计有3种可能性:1)编写两个在名称中带有显式选项的函数:myFunctionFlag1(...);myFunctionFlag2(...);2)使用模板参数:templatemyFunction(...);3)使用可变参数:myFunction(...,constbool

c++ - 正确关闭 WinAPI HANDLEs(避免重复关闭)

我有一些句柄,我需要关闭它。代码中有些地方可能会关闭句柄。那么,这是关闭句柄的正确方法吗?HANDLEh;....if(h!=INVALID_HANDLE_VALUE){::CloseHandle(h);h=INVALID_HANDLE_VALUE;}关于位图句柄也有同样的问题:HBITMAPhb;....if(hb!=INVALID_HANDLE_VALUE){::DeleteObject(hb);hb=INVALID_HANDLE_VALUE;}编辑:我认为存在一些误解。我知道CloseHandle用于关闭句柄。我想知道关闭Handlebars的正确方法。删除指针时会发生类似的情况

c++ - boost::optional 的比较 (<)、输出 (<<) 和赋值 (=)

我有几个关于如何boost::optional的问题作品。让我们首先这样做:boost::optionali;是i总是等于*i(和其他关系运算符类似)?条件是否正确i和*i未定义?(i仍未设置任何值)什么是std::cout应该打印吗?我很确定i=3始终与*i=3相同.如果是这样,我应该更喜欢哪个? 最佳答案 没有。如果i未初始化,第一个将返回true,而第二个将断言。没有。operator的文档清楚地表明,如果左侧参数未初始化,它将返回true设置右手操作数时。没有operator对于optional所以我假设它会返回unspec

c++ - 如何脱离 std::experimental::optional?

使用Boost,我可以创建一个可选的就地:boost::optionalwork=boost::in_place(boost::ref(io_service));并通过以下方式解除它:work=boost::none;有了C++14/实验性支持,我可以改为构建一个可选的就地:std::experimental::optionalwork;work.emplace(boost::asio::io_service::work(io_service));但我不知道如何解除它... 最佳答案 work=std::experimental::

c++ - 赋值运算符的 boolean 和字符串重载 (C++)

我正在定义赋值运算符的多个重载,如下所示:Foo.hclassFoo{private:boolmy_bool;intmy_int;std::stringmy_string;public:Foo&operator=(boolvalue);Foo&operator=(intvalue);Foo&operator=(conststd::string&value);};Foo.cpp//AssignmentOperators.Foo&Foo::operator=(boolvalue){my_bool=value;return*this;}Foo&Foo::operator=(intvalue)