Рассмотрим следующие тесты:
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
?
использование std::remove_cv
удалять const
а также volatile
если представить:
std::is_same<std::remove_cv<T>::type, long long int>::value;
Ты можешь использовать станд :: remove_cv заботиться о const-volatile спецификаторах.
И вы можете использовать станд :: 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
и изменчивые версии тех.