另一个方向的隐含转换

时间:2015-07-20 10:22:00

标签: c++

当您无法修改包装类时,包装器类很好。使用包装器,我可以添加某些功能和方便,我仍然可以通过使用从包装器到包装类型的隐式转换,使用包装类型的函数接受包装器。像这样:

struct vec {
    __m128 m128;
    inline operator __m128 &() {
        return m128;
    }
    //convenience to add functionality related to the wrapped variable inserted here
}

这很有效。

现在我的问题是,当你无法访问包装类型的源代码或者无法修改它时,你可以隐式地转换从__m128到vec的其他方式吗?

2 个答案:

答案 0 :(得分:5)

是的,只需编写一个构建函数,其中包含一个未标记为__m128的{​​{1}}:

explicit

答案 1 :(得分:3)

您可以添加(1)接受单个__m128参数的构造函数。如果您不添加explicit,则会提供隐式转化。这称为转换构造函数

C ++ 03 12.3.1 / 1
  

在没有函数说明符 explicit的情况下声明的构造函数可以使用单个参数调用,指定从其第一个参数的类型转换为它的类的类型。这样的构造函数称为转换构造函数。

C ++ 11(非常不合理地,恕我直言)扩展了该术语的含义,以涵盖从多个指定参数的“转换”到构造函数类的类型:

C ++ 11 12.3.1 / 1
  

在没有函数说明符 explicit的情况下声明的构造函数指定从其类型转换   参数类型的类。这样的构造函数称为转换构造函数

1)如果它有更多的参数,那么这些必须是默认的或者是...省略号。 功能