考虑以下测试:
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
?
答案 0 :(得分:7)
使用std::remove_cv
删除const
和volatile
(如果有):
std::is_same<std::remove_cv<T>::type, long long int>::value;
答案 1 :(得分:4)
您可以使用std::remove_cv来处理const-volatile说明符。
您可以使用std::make_signed来处理已签名/未签名的问题。虽然,我并不特别喜欢这个想法(unsigned char
与char
真的相同吗?不。)。
std::is_same< std::make_signed< std::remove_cv<T> >, char >::value;
char
,unsigned char
,const char
,const unsigned char
以及其中的易变版本都适用。