是否有类型特征模板返回给定类型的基本类型。通过基类型我的意思是带有所有值修饰符的类型,const,volatile等被剥离。例如,使用假设特征函数:
base<int>::type == int
base<int const>::type == int
base<int&>::type == int
我了解remove_const
和remove_reference
,目前我正在组合使用它们。我想知道是否已经存在这样的特征,也许是否有一个正确的名称,我所指的是什么?
答案 0 :(得分:13)
我会想象一个类型别名,例如:
template<typename T>
using base_type = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
请注意,here R. Martinho Fernandes为此类别别建议使用名称Unqualified
。
另一方面,标准类型特征std::decay
与上面的和相同,对于数组和函数类型更多,这可能是您想要的也可能不是。< / p>
答案 1 :(得分:4)
尝试std::decay
。它模仿了当你通过值传递参数时发生的事情:剥离顶级cv限定符,引用,将数组转换为指针,将函数转换为函数指针。
此致 &安培; rzej
答案 2 :(得分:1)
显然,这取决于您要从该类型中删除的确切内容。 std::decay可能是您正在寻找的东西(删除引用,const/volatile
,将数组衰减到指针并将函数衰减到函数指针)。如果你不希望数组指针和函数指向功能指针衰减,你需要坚持std::remove_reference
和std::remove_cv
(删除const
和volatile
)。当然,您可以将两者合并到您自己的typetrait中,以便更轻松地使用它。