我如何检查一个类型是否是std::bittset的特殊化?

问题描述 投票:0回答:1

我正在努力在编译时检查类型是否是std::bittset。

我想用这样的方法。

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

我想这样 所以职位 指向了正确的方向,但由于某些原因,我无法用std::bitset来实现它。

在C++14中,最好的方法是什么?

c++ templates typetraits
1个回答
5
投票

解决方案与你发布的链接中的答案非常相似。

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 接受一个非类型参数。

下面是一个 演示.

© www.soinside.com 2019 - 2024. All rights reserved.