将const lvalue参考作为rvalue参考
Passing a const lvalue reference as rvalue reference
我具有接受rvalue参考的函数:
template<typename... Ts>
void foo(std::tuple<Ts...>&& t)
{
processFoo(std::forward<std::tuple<Ts...>>(t));
}
以及接受LVALUE参考的另一个功能:
template<typename T>
void bar(const T& t);
我希望 bar
能够与lvalues和rvalues绑定,因此可以签名。然后,我想从bar调用foo
调用CC_2。对于此代码:
template<typename T>
void bar(const T& t);
{
foo(t);
}
我的编译器正确地抱怨foo(...)
没有匹配功能,因为std::tuple<_blahblahblah>
和const std::tuple<_blah>
具有不兼容的CV-Qualifiers。所以我做以下操作:
template<typename T>
void bar(const T& t);
{
foo(std::forward<T>(const_cast<T&>(t)));
}
但是const_cast
看起来像个解决方法!
上面的转发代码看起来还可以吗?对于其他参考类型和CV-Qualifiers来说,也许更好的是foo
?还是有任何"更普遍的"参考,这有助于摆脱const_cast
?
这在 std::tuple<Ts...> &&
是不是转发参考之前无法工作的,这是一个简单的rvalue-Reference,并且您不能将const lvalue-ref绑定到rvalue-参考 - 将代码更改为:
template<typename Tuple>
void foo(Tuple&& t) {
processFoo(std::forward<Tuple>(t));
}
您将有一个真正的转发参考,您的代码将起作用。
相关文章:
- RVALUE参考与const lVALUE参考作为参数之间的混淆
- 如何使对象通过RVALUE参考通过而没有复制
- RVALUE参考与LVALUE结合
- RVALUE参考和多态性
- 是转发参考是否仍然是RVALUE参考
- 在平等符号左侧使用RVALUE参考的规则是什么?
- 如何将rvalue作为参考参数传递给函数
- 为什么const rvalue合格的std ::可选:: value()返回const rvalue参考
- C 11:为什么RVALUE参考参数隐式转换为LVALUE
- 如何使用转发将RVALUE铸造为lvalue参考
- 是否有一种方法可以避免在RVALUE和LVALUE参考中创建功能时避免重复的代码
- 模板功能不使用RVALUE参考实例化/接收呼叫
- 作为RVALUE参考与双移动值的传递
- rvalue参考vector :: push_back函数如何提高效率
- 函数返回rvalue参考是否有意义
- 用rvalue参考和变异模板bits bits bys blamda by
- 移动后通过rvalue参考返回
- 为什么STD :: MOVE将RVALUE参考作为参数
- 成员函数返回成员变量的RVALUE参考
- 反复调用MOVE,其中需要RVALUE参考