草庐IT

product_variants

全部标签

c++ - VARIANT_BOOL 与 BOOL

我正在使用ATL在C++中编写COM对象,但不确定是否应该为我的方法/属性使用VARIANT_BOOL。该对象将由其他C++应用程序调用,但我不能排除.NET的使用。我可以坚持使用旧的BOOL(IIRC只是一个无符号整数)但是因为VARIANT_BOOL在那里,我不应该使用它吗?如果我确实使用它,并从C++应用程序调用这些方法,我必须添加额外的代码,因为VARIANT_BOOL不像“普通”bool值,我必须检查VARIANT_TRUE和VARIANT_FALSE值。VARIANT_BOOL是我可以忘记的时代错误还是我应该坚持使用它? 最佳答案

c++ - constexpr 中的 std::variant 修改

考虑以下两个程序:#include#includeconstexprautof(){usingT=std::variant;Tt(false);t=T(true);returnstd::get(t);}templatevoidprint(){std::cout();}和#include#includeconstexprautof(){usingT=std::variant;Tt(false);t=T(42);returnstd::get(t);}templatevoidprint(){std::cout();}GCC编译这两个并输出预期的结果。在这两种情况下,Clang都不会编译它们中

c++ - boost::variant 访问者选择了错误的重载

为什么下面会打印出"Aboolean!"?我意识到正在进行一些奇怪的转换,因为如果我显式构造一个std::string我会得到正确的行为。但是为什么在下面的情况下重载解析会选择visitor::operator()(bool)?#include#includetypedefboost::varianttype;structvisitor:publicboost::static_visitor{voidoperator()(boolb)const{std::cout我正在运行VisualStudio2012(CTP与否给出相同的结果) 最佳答案

c++ - 返回类型 std::optional<std::variant<...>>

我遇到这样一种情况,函数必须返回从表中获取的值。此表中的单元格(假设该表正常工作...)可能包含值,也可能不包含值。该值也可以是以下几种类型之一:int,double,string,date(但没有其他类型)。这样的函数会返回什么?返回std::optional>是个好主意吗??这对optional有用吗?和variant? 最佳答案 我认为这是std::monostate的一个有用用途.具体来说,variant.monostate对于variant的情况很有用可能不包含值。使用实际类型而不是optional的好处是访问正常工作吗?

C++17 std::variant 头文件 (clang 6.0.0)

更新我将问题缩小到(可能!这还不完全清楚,甚至阅读了我能找到的关于该主题的所有内容)安装stdlibc++-7-dev会为我提供合适的(即C++17兼容)STLheader和库。这(同样,显然)与Ubuntu17.04(artful?)捆绑在一起,但不适用于xenial(Ubuntu16.04.3LTS),这就是我的我正在使用。我已经尝试下载单独的.deb包并安装它们,但它很快就会变成一个Unresolved依赖项的迷宫。如果有人能告诉我如何在16.04上安装libstdc++-7-dev,我将不胜感激。原始问题我刚刚通过包管理器(在theseinstructions之后)在Ubunt

c++ - 为什么不允许 std::variant 与其替代类型之一进行相等比较?

例如,相等比较std::variant应该很有帮助用T1或T2.到目前为止,我们只能与相同的变体类型进行比较。 最佳答案 一个变体可能有多个相同类型的拷贝。例如。std::variant.std::variant的给定实例比较等于另一个当且仅当它们持有相同的变体备选方案并且所述备选方案的值比较相等。因此,一个std::variant与index()0比较不等于std::variant与index()1,尽管活跃的变体替代品具有相同的类型和相同的值(value)。因此,标准没有实现通用的“与T比较”。但是,您可以使用中的其他辅助实用程

c++ - 如何在 "two dimensional manner"中使用 boost::variant 定义异构 std::map

我很乐意得到并建议如何以“二维方式”处理boost::variant。听起来很奇怪,但让我的代码说得更多(希望如此):我编写了一个名为Parameter的类:templateclassParameter:publicquantity{...}上面定义的我的参数的示例用法:ParameterSampleParameter1;ParameterSampleParameter2;正如我试图通过上面的示例解释的那样,我可以使用boost::units::si::???和不同的数据类型(如double,short)定义多个参数类型,int等我的目标是构建一个std::map容器,它可以存储任何P

c++ - boost::variant 类型转换

我有来自boost库的以下变体:typedefboost::variantvariant;现在我想从声明为“value”的变量中获取一个值'在structnode,所以我想我可以工作通用并调用函数:find_attribute(attribute);,但是编译器说它不能从variant转换为long或我给它的任何其他类型。我做错了什么?templateTfind_attribute(conststd::string&attribute){std::vector>::iteratornodes_iter=_request->begin();for(;nodes_iter!=_reques

c++ - 如何确定 boost::variant 变量是否为空?

我定义了一个boost::variantvar是这样的:boost::variantfoo;此变量在实例化但未初始化时具有boost::blank类型的值,因为boost::blank是传递给模板化boost的第一个类型::变体。有时,我想知道foo是否已经初始化。我试过这个,但没有好的结果:if(foo)//doesn'tcompileif(foo!=boost::blank())//doesn'tcompileif(!(foo==boost::blank()))//doesn'tcompile我认为值得注意的是,当foo已初始化(例如,foo=true)时,可以通过执行foo来“重

c++ - 在 std::variant 中按类型获取索引

标准库中是否有实用程序可以获取std::variant中给定类型的索引?还是我应该自己做一个?即我要获取B的索引在std::variant并获得返回1.有std::variant_alternative为相反的操作。当然,std::variant上可能有很多相同的类型的列表,所以这个操作不是双射,但对我来说不是问题(我可以在列表中第一次出现类型,或者在std::variant列表中出现唯一类型)。 最佳答案 几年后更新:我在这里的回答可能很酷,但是this是正确的。这就是我今天要解决这个问题的方法。我们可以利用index()几乎已经