14

是否有类型特征模板返回给定类型的基本类型。基本类型是指去掉所有值修饰符、const、volatile 等的类型。例如,使用假设的特征函数:

base<int>::type == int
base<int const>::type == int
base<int&>::type == int

我知道remove_const并且remove_reference目前只是将它们结合使用。我想知道是否已经存在这样的特征,也许我所指的东西是否有合适的名称?

4

3 回答 3

20

我可能会定义一个类型别名,例如:

template<typename T>
using base_type = typename std::remove_cv<typename std::remove_reference<T>::type>::type;

请注意,这里 R. Martinho Fernandes提出了Unqualified这种类型别名的名称。

std::decay另一方面,标准类型 trait与上述相同,并且对数组和函数类型执行更多操作,这可能是您想要的,也可能不是。

于 2013-05-25T12:35:26.780 回答
9

试试std::decay。它模仿了按值向函数传递参数时发生的情况:去除顶级 cv 限定符、引用、将数组转换为指针以及将函数转换为函数指针。

问候, &rzej

于 2013-05-25T12:38:48.647 回答
3

显然,这取决于您要从类型中删除的确切内容。std::decay可能是您要查找的内容(删除引用,将const/volatile数组衰减为指针,将函数衰减为函数指针)。如果您不希望数组指向指针和函数指向函数指针衰减,则需要坚持使用std::remove_referenceand std::remove_cv(删除constand volatile)。当然,您可以将两者结合到您自己的 typetrait 中,以便更轻松地使用它。

于 2013-05-25T12:35:03.640 回答