折叠表达式:遍历可变参数模板类型参数以检查包含类型的编译时条件

时间:2018-11-11 22:50:52

标签: c++ templates c++17

我想到的想法很简单:在一个可变参数的类模板中,我想检查一些有关类型的编译时条件。在这种情况下,我想找出包装中是否包含某种类型。这就是使用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;
    }
};

1 个答案:

答案 0 :(得分:5)

static constexpr bool hasType() {
    return (std::is_same<T, Types>::value || ...);
}

必须在fold表达式中加上括号,并且在使用false作为运算符时,可以省略||