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&)
。请记住,隐式转换是邪恶的,双向转换是纯粹的邪恶。