另一个方向的隐式转换
Implicit conversion in the other direction
当不能修改包装的类时,包装类是很好的。使用包装器,我可以添加某些功能和便利性,并且通过使用从包装器到包装类型的隐式转换,仍然可以使使用包装类型的函数接受包装器。像这样:
struct vec {
__m128 m128;
inline operator __m128 &() {
return m128;
}
//convenience to add functionality related to the wrapped variable inserted here
}
这个效果很好。
现在我的问题是,当您无法访问包装类型源或无法修改它时,您是否可以隐式地转换其他方式,从__m128到vec ?
是的,只要写一个构造函数,取一个不标记为explicit
的__m128
:
vec (__m128 m128) //maybe take by const-ref (I don't know what __m128 is)
: m128(m128)
{}
您可以添加一个构造函数,(1)接受单个__m128
参数。如果不添加explicit
,则它提供隐式转换。这被称为转换构造函数。c++ 03 12.3.1/1
”没有函数说明符
explicit
的构造函数声明可以用单个形参调用,指定从其第一个形参的类型转换为其类的类型。这样的构造函数称为转换构造函数。
c++ 11(相当不合理,恕我冒昧)扩展了该术语的含义,以涵盖转换。从多个指定参数,到构造函数类的类型:
11 12.3.1/1 c++”未声明函数说明符的构造函数
explicit
指定了从其类型的转换参数设置为其类的类型。这种构造函数称为转换构造函数。
<一口>1)如果它有更多的参数,那么这些必须是默认的或...
省略号。一口>
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 使用Unreal C++获取VR耳机的世界位置/方向
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- DirectX矩阵:相对于面向方向的转换(例如在FPS中)
- 如何正确地将std::字符串转换为无符号char[]数组*.我觉得我做错了,有人给我指明了正确的方向
- 缓慢运行的方向转换代码
- 另一个方向的隐式转换
- 转换鼠标位置为方向和返回
- xzy到xyz方向转换