C++11 转换运算符重载l值,避免重复代码

C++11 转换运算符重载l值,避免重复代码,c++11,constants,lvalue,conversion-operator,C++11,Constants,Lvalue,Conversion Operator,我有一个包装类,需要与包装类互换使用。 幸运的是,类和包装器是二进制兼容的(通过设计),并且可以轻松地执行转换(例如,在本例中,通过reinterpret\u cast,或者更简单地执行转换) 在某种程度上,为了实现这一点,我需要能够通过操作符T()将包装类型转换为包装类型 当前代码如下所示: template<class T> // // I am putting this general T type, to show it can be a large (movable) ob

我有一个包装类,需要与包装类互换使用。 幸运的是,类和包装器是二进制兼容的(通过设计),并且可以轻松地执行转换(例如,在本例中,通过
reinterpret\u cast
,或者更简单地执行转换)

在某种程度上,为了实现这一点,我需要能够通过
操作符T()
将包装类型转换为包装类型

当前代码如下所示:

template<class T> // // I am putting this general T type, to show it can be a large (movable) object, for example, std::vector.
struct wrapper{
   T a;
   operator T const&() const&{return a;}  // in other cases it can involve more code, like reinterpret_casts or some conditional blocks.
   operator T&&() &&{return std::move(a);} // same
   operator T&() &{return a;} // same
};
template///我放置这个通用的T类型,以显示它可以是一个大的(可移动的)对象,例如std::vector。
结构包装器{
Tα;
运算符T const&(()const&{return a;}//在其他情况下,它可能涉及更多代码,如重新解释强制转换或一些条件块。
运算符T&&()&&{return std::move(a);}//相同
运算符T&()&{returna;}//相同
};
我可以将这三个转换函数压缩成一个函数或更少的代码,还是有其他方法?

我可以通过这种方式使它更通用(但对于这个简单的情况,代码更长)

template<class T>
struct wrapper{
   T a;
   operator T const&() const&{return a;} // complicated code can be here only
   operator T&&() &&{return std::move(operator A&());}
   operator T&() &{return const_cast<T&>(operator T const&());}
};
模板
结构包装器{
Tα;
运算符T const&(()const&{return a;}//这里只能有复杂的代码
运算符T&&()&&{return std::move(运算符A&());}
运算符T&()&{return const_cast(运算符T const&());}
};
最终目标是
T
可以与
包装器互换使用

这跟,, 但是,这种情况更为具体,因为1)它涉及转换运算符,2)涉及l值重载