草庐IT

any_option

全部标签

c++ - 为什么 std::function<boost::any ()> 在这种情况下不起作用?

我遇到过需要这种功能的情况:MoveOnlycreateMoveOnly();存储在这里:std::functionfactory=&createMoveOnly;据我所知,这应该可行,因为MoveOnly可以转换为boost::any使用支持boost.any移动语义的boost1.55,它不起作用。它会触发有关尝试在boost::any的持有者内部为MoveOnly使用已删除的复制构造函数的错误。但是正确选择了Boost.Any的顶级构造函数(它使用模板化的ValueType&&来转发参数)。也许问题出在std::function中。有什么提示吗? 最佳

c++ - boost::any 类型更改导致非法访问

在通过boostcpp库一书测试示例时,我注意到更改存储在boost::any变量中的类型可能会导致非法访问而不是异常:好:boost::anya=1;bool*p=boost::any_cast(&a);//ok,badcastexception不好:boost::anya=std::string{"Boost"};a=1;bool*p=boost::any_cast(&a);//noexceptionthrownstd::cout因此,我的问题是:这是一个看起来的错误,还是我不知道的与模板使用相关的一些潜在事实? 最佳答案 我明

c++ - vector 值 boost::program_options 的默认值

我有一个boost::program_options选项,它成功地将所需的输入选项解析为一个vector,但我没有看到如何也给它一个默认值。示例:base.add_options()("vector_value",po::value>(&vecoption)->multitoken(),"description");可以很好地将值读入vecoptions之类的东西base.add_options()("int_value",po::value(&intoption)->default_value(1),"description");也可以正常工作,但尝试为vector参数提供一个默认值

c++ - 对 std::optional 的转发引用构造函数的约束

std::optional截至目前有8个构造函数,列在下面(也在此处http://en.cppreference.com/w/cpp/utility/optional/optional)/*(1)*/constexproptional()noexcept;/*(1)*/constexproptional(std::nullopt_t)noexcept;/*(2)*/constexproptional(constoptional&other);/*(3)*/constexproptional(optional&&other)noexcept(/*seebelow*/);template/

c++ - 无法迭代 Poco::Any 的 std::map

我有一个Poco::Any的std::map,我正在尝试对其进行迭代并输出到流中,但出现编译器错误。我的代码如下:map::const_iteratorit;map::const_iteratorend=_map.end();map::const_iteratorbegin=_map.begin();for(it=begin;it!=end;++it){conststd::type_info&type=it->second.type();//compileerrorhere:osfirst(it->second)该行有2个错误:'type'cannotappearinaconstant

c++ - 尝试使用 boost::optional 失败

我一直在尝试将boostoptional用于可以返回对象或null的函数,但我无法弄清楚。这是我到目前为止所拥有的。任何有关如何解决此问题的建议都将不胜感激。classMyclass{public:inta;};boost::optionalfunc(inta)//ThiscouldeitherreturnMyClassoranull{boost::optionalvalue;if(a==0){//returnanobjectboost::optionalvalue;value->a=200;}else{returnNULL;}returnvalue;}intmain(intargc,

c++ - boost::optional 和类型转换

我想知道是否有一种优雅的方式来转换boost::optional到boost::optional什么时候B可以从A构建,尽管是明确的。这有效:#includeclassFoo{inti_;public:explicitFoo(inti):i_(i){}};intmain(){boost::optionali;...//igetsinitializedornotboost::optionalfoo;foo=boost::optional(bool(i),Foo(i.value_or(0/*unusedvalue*/)));return0;}但是需要将一些永远不会被使用的值放在那里似乎很尴

c++ - C/C++ : -msse and -msse2 Flags do not have any effect on the binaries?

我只是在玩弄gcc(g++)和编译器标志-msse和-msse2。我有一个看起来像这样的小测试程序:#includeintmain(intargc,char**argv){floata=12558.5688;floatb=6.5585;floatresult=0.0;result=a*b;std::cout当我用下面的语句编译它时:/usr/local/bin/g++-4.9-W-mssemain.cpp-otestsse和/usr/local/bin/g++-4.9-W-msse2main.cpp-otestsse2输出文件是二进制相等的。但由于SMID标志,我预计它们并不相同。所以

c++ - std::optional<std::reference_wrapper<T>> - 可以吗?

是std::optional>是否符合C++17的标准(或草案)?标准明确指出,引用类型的std::optional格式错误。但它是否包括reference_wrapper? 最佳答案 是的。那没问题。它不包括reference_wrapper因为reference_wapper不是引用类型。只有实际的引用类型是不允许的。 关于c++-std::optional>-可以吗?,我们在StackOverflow上找到一个类似的问题: https://stackov

c++ - 为什么忽略 std::optional 的强制转换运算符?

这段代码#include#includestructfoo{explicitoperatorstd::optional(){returnstd::optional(1);}explicitoperatorint(){return2;}};intmain(){foomy_foo;std::optionalmy_opt(my_foo);std::cout>(my_foo);std::coutproducesthefollowingoutputconstructor:2static_cast:2在Clang4.0.0和MSVC2017(15.3)中。(让我们暂时忽略GCC,因为在这种情况下它