我正在寻找this question的一个不那么笨拙的答案,即在编译时检查模板参数是否在数字列表中。我不仅要检查函数的范围,还要检查整数在编译时是否在任意整数列表中。该答案的作者写道,当C ++ 0x出现在constexpr,static_assert和用户定义的文字中时,事情会变得容易得多,"但我没有看到完全如何。
我想使用this boost::mpl::contains函数(或其他任何函数),但它只需要一个类型作为第二个参数。
答案 0 :(得分:2)
只为了它的乐趣:
template <int first, int... last>
struct int_list {
static bool constexpr check(int c) {
return first == c ? true : int_list<last...>::check(c);
}
};
template <int first>
struct int_list<first> {
static bool constexpr check(int c) { return c == first; }
};
using my_sequence = int_list<1, 5, 12, 45, 76, 60>;
static_assert(my_sequence::check(10), "No tenner");