在c ++中自动将模板对象转换为模板指针

时间:2012-01-23 12:21:19

标签: c++ templates pointers casting

我有一个URes类,其中包含指向<T>的单个指针,间接运算符->*已重载,因此我可以直接将该实例用作指针。

但是我也希望能够将URes实例传递给通常在URes实例中使用指针的函数。

如何使我的URes实例对象传递给函数时,它会自动转换为它包含的指针?

2 个答案:

答案 0 :(得分:4)

与创建任何出站转换的方式相同:通过声明和定义运算符。

在这种情况下,您需要成员operator T*

Example

template <typename T>
struct Foo {
   operator T*() {
      return 0;
   }
};

void bar(int* p) {}

int main() {
   Foo<int> f;
   bar(f);
}

但是,我建议避免这种情况并改为实施成员T* get()。它应该是显式步骤,以便调用范围从对象获取指针。

答案 1 :(得分:2)

您可以通过提供从该类到指针类型的转换运算符来实现:

class Foo {
public:
    operator int() const { // enables implicit conversion from Foo to int
    }
};

请注意这种隐式转化can introduce unexpected behavior