C++ 另一个方向的隐式转换
当您不能修改包装类时,包装类很好。使用包装器,我可以添加某些功能和方便性,并且我仍然可以通过使用从包装器到包装类型的隐式转换,在使用包装类型的函数中接受包装器。大概是这样的:C++ 另一个方向的隐式转换,c++,C++,当您不能修改包装类时,包装类很好。使用包装器,我可以添加某些功能和方便性,并且我仍然可以通过使用从包装器到包装类型的隐式转换,在使用包装类型的函数中接受包装器。大概是这样的: struct vec { __m128 m128; inline operator __m128 &() { return m128; } //convenience to add functionality related to the wrapped variab
struct vec {
__m128 m128;
inline operator __m128 &() {
return m128;
}
//convenience to add functionality related to the wrapped variable inserted here
}
这很有效
现在我的问题是,当您无法访问包装的类型源或无法修改它时,您能否以另一种方式将uu m128隐式转换为vec?是的,只需编写一个构造函数,使用未标记为
explicit
的单个\uu m128
:
vec (__m128 m128) //maybe take by const-ref (I don't know what __m128 is)
: m128(m128)
{}
是的,只需编写一个构造函数,其中包含一个未标记为显式的
\uuuu m128
:
vec (__m128 m128) //maybe take by const-ref (I don't know what __m128 is)
: m128(m128)
{}
您只需添加一个构造函数,该构造函数(1)接受一个
\uum128
参数。如果不添加显式,则它提供隐式转换。这称为转换构造函数
C++03 12.3.1/1
“声明的构造函数没有函数说明符explicit
,可以使用单个参数调用该构造函数,它指定从其第一个参数的类型到其类的类型的转换。这样的构造函数称为转换构造函数
C++11(相当不合理地,IMHO)将术语的含义扩展到包括从多个指定参数到构造函数类类型的“转换”:
C++11 12.3.1/1
“未使用函数说明符声明的构造函数explicit
指定其类型的转换
参数设置为其类的类型。这样的构造函数称为转换构造函数
1) 如果它有更多的参数,那么这些参数必须是默认值或是
…
省略号。
您只需添加一个构造函数,该构造函数(1)接受单个
\uum128
参数。如果不添加显式,则它提供隐式转换。这称为转换构造函数
C++03 12.3.1/1
“声明的构造函数没有函数说明符explicit
,可以使用单个参数调用该构造函数,它指定从其第一个参数的类型到其类的类型的转换。这样的构造函数称为转换构造函数
C++11(相当不合理地,IMHO)将术语的含义扩展到包括从多个指定参数到构造函数类类型的“转换”:
C++11 12.3.1/1
“未使用函数说明符声明的构造函数explicit
指定其类型的转换
参数设置为其类的类型。这样的构造函数称为转换构造函数
1) 如果它有更多的参数,那么这些参数必须是默认值或是
…
省略号。
尝试单参数构造函数:
vec::vec(const\uu m128&)
。请记住,隐式转换是有害的,而双向转换是纯粹有害的。请尝试单参数构造函数:vec::vec(const\uu m128&)
。请记住,隐式转换是邪恶的,双向转换是纯粹的邪恶。