类型特征对于基本类型的所有const / volatile / signed / unsigned版本都是如此

时间:2013-05-11 15:52:06

标签: c++ c++11 typetraits qualifiers

考虑以下测试:

std::is_same<T, bool>::value
std::is_same<T, char>::value
std::is_same<T, short int>::value
std::is_same<T, int>::value
std::is_same<T, long int>::value
std::is_same<T, long long int>::value
std::is_same<T, float>::value
std::is_same<T, double>::value
std::is_same<T, long double>::value

问题是如果T = const unsigned char,所有测试都是假的,我希望这个std::is_same<T, char>::value成立。或者如果T = volatile signed long long int我希望std::is_same<T, long long int>::value成立。如何使用type_traits

2 个答案:

答案 0 :(得分:7)

使用std::remove_cv删除constvolatile(如果有):

std::is_same<std::remove_cv<T>::type, long long int>::value;

答案 1 :(得分:4)

您可以使用std::remove_cv来处理const-volatile说明符。

您可以使用std::make_signed来处理已签名/未签名的问题。虽然,我并不特别喜欢这个想法(unsigned charchar真的相同吗?不。)。

std::is_same< std::make_signed< std::remove_cv<T> >, char >::value;

charunsigned charconst charconst unsigned char以及其中的易变版本都适用。