4

考虑以下测试:

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

4

2 回答 2

7

用于std::remove_cv删除constvolatile如果存在:

std::is_same<std::remove_cv<T>::type, long long int>::value;
于 2013-05-11T15:56:09.147 回答
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以及它们的 volatile 版本都是如此。

于 2013-05-11T15:58:10.407 回答