Mih*_*yan 16 c++ operator-overloading
让我们考虑一个带有重载的一元运算符和(Address-of)的类.随它去class A
template <class C>
class A
{
public:
C * operator &()
{
return &data;
}
//...
private:
C data;
}
Run Code Online (Sandbox Code Playgroud)
现在我想传递一些函数指针A
来填充它data
.我们称之为f
void f(A * auto_containter)
{
//...
}
Run Code Online (Sandbox Code Playgroud)
但很明显为什么代码波纹管不起作用(甚至不会编译).这是因为调用了重载运算符.
A a;
f(&a);
Run Code Online (Sandbox Code Playgroud)
问题如下:
是否有任何语法传递的地址a
来f
?如果不是,那么对我来说,为什么它允许超载一元是非常奇怪的operator &
,因为它使代码更加错误和难以理解.还是有其他一些原因?
Kir*_*sky 17
是否有任何语法传递的地址
a
来f
?
是的,语法难看:
f( reinterpret_cast<A*>( &reinterpret_cast<char&>(a) ) );
Run Code Online (Sandbox Code Playgroud)
boost::addressof
是一个很好的通用包装.
Arm*_*yan 13
使用boost::addressof
功能.在任何情况下,超载一元&非常可疑.为什么不使用返回数据地址的命名函数呢?