c++ - 从结构中获取所有可变参数模板类型,该结构是函数模板中的类型参数

标签 c++ templates template-meta-programming typetraits

这是一个最小的例子:

template<typename ...Types>
struct Pack {};

template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
    return (std::is_constructible_v
            </*do something to archive all types in every TemplateTemplateType*/> 
            and ... and true);
}

struct Empty{};

int main()
{
    std::cout << std::boolalpha << AllConstructible<Pack<int, const int&>, Pack<Empty>>();
}

函数AllConstructible将返回 true iif 所有 is_constructible_v<Pack's Types>坚持下去。

Pack的定义里面很容易实现所有类型(只用Types...),但在外面怎么办呢?

最佳答案

您可以侵入一个无法解压参数的辅助模板:

template<typename ...Types>
struct Helper;

template<typename ...Types>
struct Helper<Pack<Types...>>
{
    static constexpr bool value{std::is_constructible_v<Types...>};
};

template<typename ...TemplateTemplateTypes>
bool AllConstructible()
{
    return (Helper<TemplateTemplateTypes>::value and ... and true);
}

关于c++ - 从结构中获取所有可变参数模板类型,该结构是函数模板中的类型参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55773659/

相关文章:

c++ - 尝试取消引用迭代器时出现段错误

c++ - 字符串包含有效字符

c++ - 创建将模板类作为构造函数中的参数的模板类

c++ - 编译时构造函数选择

C++ 头文件和链接器错误

c++ - 如何将json对象转换为QObject?

c++ - 模板函数查找失败

c++ - Eigen3 类的模板特化

C++ 元编程问题/挑战以生成基于它的函数调用的类型

c++ - 将 boost mpl lambda 与可变参数模板类一起使用