提问人:AKL 提问时间:7/14/2023 更新时间:7/14/2023 访问量:79
是否有任何工具可以删除标准库中的右值引用而不是右值引用?
Is there any tool to remove rvalue reference but not lvalue refrence within the standard library?
问:
基本上我想要这个:
template<typename TYPE>
struct not_rvalue_reference{
typedef std::conditional_t<std::is_rvalue_reference_v<TYPE>, std::remove_reference_t<TYPE>, TYPE> type;
};
template<typename TYPE>
using not_rvalue_reference_t = typename not_rvalue_reference<TYPE>::type;
因此,无论哪种类型,我都会得到非引用类型或左值引用类型。
我想知道标准库中是否存在这样的东西,如果没有,我必须使用它,它的最佳名称是什么?
答:
1赞
Eric M Schmidt
7/14/2023
#1
查阅 cppreference 文档以获取<type_traits>,标准库中似乎没有这样的工具。我同意评论者康桓瑋的观点,这是一个好名字。为了减少模板实例化开销,我建议采用更直接的实现方式:remove_rvalue_reference
template<typename T>
struct remove_rvalue_reference
{
using type = T;
};
template<typename T>
struct remove_rvalue_reference<T&&>
{
using type = T;
};
template<typename T>
using remove_rvalue_reference_t = remove_rvalue_reference<T>::type;
评论
0赞
AKL
7/15/2023
谢谢你的回答。最后一行中应该有一个,在 之后。我编辑了答案,请看一下。typename
=
下一个:标准库函数何时会引发异常?
评论
decltype(auto)
tuple<type, type,...>
tuple<type&,type&,...>
remove_rvalue_reference