将操作符转换为指针

时间:2014-12-02 20:15:50

标签: c++ casting

我正在定义一个包装类,它可以用作使用强制转换操作符的有效负载的替代品,但是我遇到了指针有效负载的问题:

编译器(g ++ 4.8.3)抱怨:

错误:' - >'的基本操作数有非指针类型'wrapper'   W->一种= 3;

除了取消引用之外,所有指针操作都会调用隐式强制转换运算符wrapper::operator T&->运算符是否有特殊之处?

struct pl{int a;};
struct wrapper{
    typedef pl* T;
    T t;
    operator T&(){return t;}    
};
int main(){
    wrapper w;
    w.t=new pl();
    (*w).a=1;//ok
    w[0].a=2;//ok
    w->a=3;//does not compile
    ++w;//ok
    if(w){}//ok
}

注意:与clang 3.3类似的错误

1 个答案:

答案 0 :(得分:2)

您缺少为您的班级声明/定义operator->()函数

struct pl{int a;};
struct wrapper{
    typedef pl* T;
    T t;
    operator T&(){return t;}    
    T& operator->() { return t; }  // << implement this function
};

int main(){
    wrapper w;
    w.t=new pl();
    (*w).a=1;//ok
    w[0].a=2;//ok
    w->a=3;//does not compile
    ++w;//ok
    if(w){}//ok
}

请参阅 LIVE DEMO

另见 Overloading operator-> in C++