当您无法修改包装类时,包装器类很好。使用包装器,我可以添加某些功能和方便,我仍然可以通过使用从包装器到包装类型的隐式转换,使用包装类型的函数接受包装器。像这样:
struct vec {
__m128 m128;
inline operator __m128 &() {
return m128;
}
//convenience to add functionality related to the wrapped variable inserted here
}
这很有效。
现在我的问题是,当你无法访问包装类型的源代码或者无法修改它时,你可以隐式地转换从__m128到vec的其他方式吗?
答案 0 :(得分:5)
是的,只需编写一个构建函数,其中包含一个未标记为__m128
的{{1}}:
explicit
答案 1 :(得分:3)
您可以添加(1)接受单个__m128
参数的构造函数。如果您不添加explicit
,则会提供隐式转化。这称为转换构造函数。
“在没有函数说明符
explicit
的情况下声明的构造函数可以使用单个参数调用,指定从其第一个参数的类型转换为它的类的类型。这样的构造函数称为转换构造函数。
C ++ 11(非常不合理地,恕我直言)扩展了该术语的含义,以涵盖从多个指定参数的“转换”到构造函数类的类型:
C ++ 11 12.3.1 / 1“在没有函数说明符
explicit
的情况下声明的构造函数指定从其类型转换 参数类型的类。这样的构造函数称为转换构造函数。
1)如果它有更多的参数,那么这些必须是默认的或者是...
省略号。
功能