草庐IT

any_option

全部标签

c++ - std::any 用于不能复制构造的对象

我有一个包含unique_ptr的对象,因此如果不进行深度复制(我不想要)就无法进行复制构造。我想让std::any持有那个对象,但我发现的唯一替代方法是让std::any持有一个指针,这会增加一个无用的间接寻址,或者让我的对象有一个唯一的指针。下面的代码有望说明我的观点://Compiledwithclang++-std=c++2a;clangversion5.0.0#include#include#includestructA{std::unique_ptrm=std::make_unique(11);A(A&&a):m(std::move(a.m)){}A(){}};struct

c++ - boost::optional deprecated get_value_or

我怀疑boost::optional的get_value_or已被弃用,因为如果将右值作为default参数传递是不安全的。但是,有时能够引用可选值或默认替代值很有用。以下安全吗?templateTconst&get_reference_or(boost::optionalconst&opt,Tconst&alt){if(opt)returnopt.get();elsereturnalt;}templateTconst&get_reference_or(boost::optionalconst&,T&&)=delete; 最佳答案

c++ - boost program_options 接受最后一个标志后的所有值

有没有办法收集boost::program_options指定参数后的所有值?不过,我需要注意两个注意事项,我需要接受无法识别的参数,并且我需要接受可能包含破折号的值。我试过使用command_line_parser与parse_command_line进行比较,我可以得到无法识别的值或包含破折号的值,但不能同时得到两者。例子:./myprogIgnore1Ignore2--Accept1--AlsoAccept2--AcceptAll12-34我并不关心验证--AcceptAll是否是最后传递的标志;我只是在寻找为该标志之后的所有内容返回字符串vector的逻辑。

c++ - 返回对 boost::any 持有的数据的引用

我有一个任何指针的映射,称为gmap,定义如下:std::map&gmap=getSingleton().globalValues;这张map确实是对globalValues的引用,我已经在gdb中查看了地址。我还控制了any指针(这就是为什么它们是指针,我宁愿做引用,但我现在正在调试)。现在,我用我声明gmap的相同方法返回它:returnboost::any_cast(*gmap[key]);在&boost::any_cast[T&][*gmap[key]]处观察内存,一旦我弹出堆栈帧,数据就会变坏。这很奇怪,因为根据:Boost'sdocumentationofany_cast返

c++ - 为什么 boost::optional 对于继承虚函数的类会失败

boost::optional非常适合简单的数据类型,但一旦用于从实现接口(interface)的类继承的类,它就会在启用严格别名时失败。例子:#includestructMyLine{doublea;doubleb;};classEdge{public:MyLinetoMyLine()const;private:virtualMyLinedoToMyLine()const=0;};classWall:publicEdge{public:Wall(MyLineconst&seg):mMyLine(seg){};private:MyLinedoToMyLine()const{return

c++ - C++ 的 Option/Maybe 类

我想在C++中实现类似Scala的Option/Haskell类Maybe类。出于效率原因,我不想使用动态分配的内存,也不想使用多态性。此外,如果Option为None,我不希望创建任何嵌入类型的对象。谁能告诉我以下方法是否会导致问题?我必须在我的Option类中为嵌入式对象静态分配内存,但我不能定义嵌入式类型的成员字段,因为即使Option为None,它也会在创建Option对象时初始化。templateclassOption{private:uint8_t_storage[sizeof(T)];T*_embedded;public:Option():_embedded(nullpt

c++ - boost::any 的访客模式

我找到了这个https://gist.github.com/2945472但我需要一个不依赖于c++11的实现。我尝试将其转换为仅使用boost,但遇到了一些麻烦。这是我想出的:#include#include#include#include#includestructtype_info_hash{std::size_toperator()(std::type_infoconst&t)const{returnt.hash_code();}};structequal_ref{templatebooloperator()(boost::reference_wrappera,boost::r

c++ - std::experimental::optional<T> 实现:Constexpr 构造函数混淆

实现时std::experimental::optional(cppreference.com)我对特定构造函数的规范感到困惑,即:constexproptional(constT&value);//(4)(Source)这个构造函数允许optional,对于一个普通的可破坏类型T,将于constexprbuild语境。而第一个要求,即在这种情况下关闭用户提供的析构函数以生​​成optional。文字类型,可以直接解决,我不知道如何解决constexpr中不允许放置新内容的限制。我以为我应该实现optional使用std::aligned_storage允许类型T不是默认构造的并且满足

c++ - 针对 C++11 的 boost::any typeid 优化

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Whencantypeidreturndifferenttype_infoinstancesforsametype?如果我将下面的operand->type()==typeid(ValueType)行更改为&operand->type()==&typeid(ValueType),则代码仍然适用于gcc,并且在可执行文件中占用的空间更少(并且多年来一直如此),但是C++11标准是否提供任何保证,这种优化应该适用于不同的编译器?templateValueType*any_cast(any*operand){ret

c++ - Boost 程序选项 : positional and multitoken options

当同时允许多标记和位置选项时,boost::program_options如何解析或管理输入?例如:./app.samplepos1--multitokenoptionabcdpos2boost如何知道multitokenoption何时结束以及位置选项何时开始?显然,最合乎逻辑的允许行为是multitoken选项必须作为最后一个参数出现,就像函数参数中的默认参数一样,但文档对此只字未提。 最佳答案 可以通过三种方式来标记多token选项值的结束:另一种选择:./app.samplepos1--multitokenoptionabc