我想,以防止非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