【发布时间】:2014-12-03 04:39:36
【问题描述】:
我正在定义一个包装类,它可以用作使用强制转换运算符的有效负载的替代品,但是我遇到了指针有效负载的问题:
编译器(g++ 4.8.3)抱怨:
错误:“->”的基本操作数具有非指针类型“包装器” w->a=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 类似的错误
【问题讨论】:
-
->运算符有自己的签名,您必须提供一个 T& 运算符->() 才能使其工作。 -
您必须将
w传递给期望pl*的函数。