防止将左值引用绑定到非const对象
preventing binding of lvalue references to non-const objects
我想防止将非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引用,它引用的对象可以被修改,但是另一个进程没有访问转发进程的内存空间,因此我不转发它。
这个怎么样:
template <typename T>
void func(const T &x) {
process(x);
}
template <typename T>
void func(T &x) {
do_nothing(x);
}
相关文章:
- 被解释为低级别const的const对象的地址
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- "this"指向的对象是否与 const 对象相同?
- 从 const 对象访问非 const 方法
- 将非 const 对象用于 const 参数
- 如何键入用于const对象的自定义io操纵器
- 哪个 const 与哪个引用将更改参数并创建一个 const 对象?
- 无法在返回中转换 const 对象
- 接受对 const 对象的引用但没有 r 值的函数
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 在 const 对象上调用非 const 函数
- 正确的方法通过巨大的const对象的向量
- 如何重载 const 对象的 [],以便值赋值不会导致编译错误
- 相互引用的 Const 对象
- 析构函数是否可以在 const 对象上调用非 const 函数
- decltype 不会推断 const 对象的 const 成员
- 防止const函数被调用非const对象
- constexpr引用非const对象