Как я могу проверить, является ли тип специализацией std :: bitset? - PullRequest
0 голосов
/ 05 мая 2020

Я изо всех сил пытаюсь проверить во время компиляции, является ли тип std :: bitset или нет.

Я бы хотел что-то вроде:

is_bitset<std::bitset<2>>::value; // should evaluate to true
is_bitset<int>::value; // should evaluate to false

Я думаю, что это Сообщение SO указывает в правильном направлении, но по какой-то причине мне не удается заставить его работать с std :: bitset.

Как лучше всего сделать это с помощью C ++ 14 ?

1 Ответ

5 голосов
/ 05 мая 2020

Решение очень похоже на ответ в опубликованной вами ссылке:

template<typename T>
struct is_bitset : std::false_type {};

template<std::size_t N>
struct is_bitset<std::bitset<N>> : std::true_type {};

static_assert(is_bitset<std::bitset<2>>::value); // should evaluate to true
static_assert(!is_bitset<int>::value); // should evaluate to false

Обратите внимание, что первичный шаблон принимает тип, а специализация для bitset принимает параметр, не являющийся типом.

Вот демонстрация .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...