加速变体:绑定顺序中是否有魔力
Boost Variant: Is there magic in the binding order?
我一直在阅读我能找到的关于Boost Variant的所有内容。 (我头疼。有些人惊讶于分配字符串文字被保存为布尔值。 如果我在bool
之前(之后?)列出char*
,字符串文字会保存为char*
字符串吗? v1
和v2
之间的排序在这里重要吗?
boost::variant<char*, bool> v1 = "hello";
boost::variant<bool, char*> v2 = "hello";
对于整数,我应该简单地为所有整数绑定最大的整数,还是应该单独绑定int8_t
到 int64_t
? 如果我将它们全部绑定,然后输入一个,适合其中任何一个,它是否会保存为第一个(最后一个?
float
与double
怎么样?
没有魔法。
只有构造函数的记录行为。
template<typename T> variant(T & operand);
要求:T 必须明确可转换为有界类型之一(即 T1、T2 等)。
后置条件:内容 *这是操作数到有界类型之一的最佳转换,由标准重载解析规则确定。
抛出:可能会失败,并且由于将操作数转换为有界类型之一而出现任何异常。
由于这两种情况都涉及隐式转换,因此可能会构造意外的元素类型。
请参阅以下示例
住在科里鲁
#include <boost/variant.hpp>
int main() {
{
boost::variant<bool, std::string> v;
v = "hello"; // is char const(&)[6], converts to bool
assert(0 == v.which());
v = static_cast<char const*>("hello");
assert(0 == v.which());
}
// compare to
{
boost::variant<bool, char const*> v;
v = "hello"; // is char const(&)[6]
assert(1 == v.which()); // now selects the direct match
v = static_cast<char const*>("hello");
assert(1 == v.which());
}
}
相关文章:
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 关于std::move的使用,是否有编译警告
- 是否有C++编译器选项允许激进地删除所有函数调用,并将参数传递给具有空体的函数
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 在C++中,使用带有 std::optional 参数的函数<T>来表示可选参数是否有意义?
- 是否有任何C++功能可以对地图进行排序?
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 用于检查数字是否有数字或可被该数字的值整除的程序
- 在Arduino中将PWM通道命名为LEDC是否有特定原因
- boost 是否有按特殊类型值编码状态"compact optional"?
- 有没有办法在 c++ 中同时生成随机数?如果没有,是否有解决方法?
- 是否有任何建议来统一函数类型限定符并简化可恶的函数类型?
- 在 c++ 中是否有办法使用点运算符而不是 -> 来表示 pSomePointer->pValue->nSubvalue
- 是否有原子加载非原子值的函数?
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- C++中是否有任何函数等同于python中字典的get函数?
- 是否有 Windows 用户空间函数来枚举连接的网络共享?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 加速变体:绑定顺序中是否有魔力