我想到的想法很简单:在一个可变参数的类模板中,我想检查一些有关类型的编译时条件。在这种情况下,我想找出包装中是否包含某种类型。这就是使用C ++ 17的fold表达式编写的代码,但是显然这不是有效的语法。如何实现呢?
#include <type_traits>
template <class... Types>
struct TypesPack
{
template <typename T>
static constexpr bool hasType() {
return std::is_same<T, Types>::value || ... || false;
}
};
答案 0 :(得分:5)
static constexpr bool hasType() {
return (std::is_same<T, Types>::value || ...);
}
必须在fold表达式中加上括号,并且在使用false
作为运算符时,可以省略||
。