我想,以防止非const对象,以我的函数参数的左值引用的结合,目前我有这样的代码:防止左值引用结合非const对象
template <typename T>
using remove_cr = std::remove_const<typename std::remove_reference<T>::type>;
template <typename T>
using is_nc_lvalue_reference
= std::integral_constant<bool,
std::is_lvalue_reference<T>::value
&& !std::is_const<typename std::remove_reference<T>::type>::value
>;
template <typename T>
void func(T && v, typename std::enable_if<
std::is_same<THE_TYPE_I_WANT, typename remove_cr<T>::type>::value
&& !is_nc_lvalue_reference<T>::value>::type* = 0)
{
}
这似乎是一个对我来说有很多代码,是否存在更优雅的SFINAE或非SFINAE方法?我不需要完美的转发,但如果我不使用它,我会丢失T
。
想法是,该const
对象不应该被修改,因此我可以将它们转换为其他表示,并喂养他们,说一个不同的过程。如果给出一个非const引用,那么它引用的对象可以被修改,但另一个进程不能访问转发过程的内存空间,因此我不会转发它。
你不能使用'const'引用吗? – 2013-03-22 18:38:24
我不想不。他们绑定一切AFAIK。 – user1095108 2013-03-22 18:38:40
等一下,我很困惑。如果你的左值引用不能绑定到非''const'对象,那么它们绑定了什么?非常量左值引用只能绑定到非''constst'左值。 – 2013-03-22 18:39:47