如何在C++ 03中"取消引用类型"?

Meh*_*dad 5 c++ templates traits template-meta-programming c++03

如何在C++ 03中获得另一种类型的"解引用类型"?请注意,它可以是其他可解除引用的类型std::vector<int>::iterator.

例如,如果我有

template<typename T>
struct MyPointer
{
    T p;
    ??? operator *() { return *p; }
};
Run Code Online (Sandbox Code Playgroud)

我该如何找出替换的内容???

(没有提升!我想知道如何弄清楚自己.)

fre*_*low 11

template<typename>
struct dereference;

template<typename T>
struct dereference<T*>
{
    typedef typename T type;
};

template<typename T>
struct MyPointer
{
    T p;
    typename dereference<T>::type operator *() { return *p; }
};
Run Code Online (Sandbox Code Playgroud)

  • @Paul:Mehrdad询问如何取消引用一种类型,我提供了答案. (3认同)
  • 这看起来最好.但是,重载`operator*`的类型怎么样? (3认同)

Pup*_*ppy 2

在一般情况下,你不能。对于原始指针,您可以部分专业化,如其他答案所示 - 自定义智能指针可能具有结果类型的通用 typedef。但是,您无法编写一个可以处理 C++03 中任何指针的函数。