首页 > 解决方案 > 折叠表达式:迭代可变参数模板类型参数以检查包含类型的编译时条件

问题描述

我的想法很简单:在可变参数类模板中,我想检查类型的一些编译时条件。在这种情况下,我想知道某个类型是否在包中。这就是代码在 C++17 的折叠表达式中的样子,但显然这不是有效的语法。如何实施?

#include <type_traits>

template <class... Types>
struct TypesPack
{
    template <typename T>
    static constexpr bool hasType() {
        return std::is_same<T, Types>::value || ... || false;
    }
};

标签: c++templatesc++17

解决方案


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

折叠表达式必须用括号括起来,并且在用作运算符false时可以省略。||


推荐阅读