`

通过变长模版参数创建一个模版参数类型都是std::vector<T>的tuple

 
阅读更多

链接:https://www.zhihu.com/question/38949490/answer/78918985

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

template <>
struct store<>
{
    using type = std::tuple<>;
};

template <typename First>
struct store<First>
{
    using first = std::vector<First>;
    using type = std::tuple<first>;
};

template <typename First,typename ...Types>
struct store<First,Types...>
{
    using first = std::vector<First>;
    using type = std::tuple<first,typename store<Types...>::first>;
};

int main()
{
    store<>::type;
    store<int>::type;
    store<int,double>::type;

    return 0;
}
 
分享到:
评论

相关推荐

    C++11 textbook.zip

    变长参数模板允许函数或类模板接受任意数量的参数。这对于实现如`std::tuple`和`printf`等功能非常有用: ```cpp template&lt;typename... Args&gt; void print(Args... args) { (std::cout &lt;&lt; ... &lt;&lt; args) &lt;&lt; '\n'; } ...

    c++元组的基本用法1

    C++元组(tuple)是C++11标准引入的一个强大工具,它允许程序员存储不同类型的值在一个单一的集合中。元组的概念类似于结构体,但比结构体更加灵活,无需预先定义结构类型即可使用。元组的特性使得它在处理多类型...

    c++实用软件包(utility.h)

    在C++编程中,"utility.h" 是一个非常重要的头文件,它包含了多个常用且实用的工具函数和模板类。这个软件包是C++标准库的一部分,为开发者提供了丰富的功能,极大地方便了代码的编写。下面将详细介绍`utility.h`中...

    机器学习 深度学习 面试精华 C++

    - 例如:`std::vector&lt;int&gt;(std::vector&lt;int&gt;(10).begin(), std::vector&lt;int&gt;(10).end());` 20. **静态断言** (`static_assert`) - `static_assert`允许在编译时检查条件是否满足,帮助捕获逻辑错误。 - 例如:`...

    c++11教程最新版

    `std::bind` 是一个用于创建函数对象的实用工具,它可以将参数绑定到函数或函数对象的特定位置。这样就可以创建一个可以稍后被调用的新函数对象,其中某些参数已经被预设好。例如: ```cpp #include &lt;functional&gt; #...

    类似Boost中Tuple的实现

    在编程领域,`Tuple`是一种常见的数据结构,它允许存储多个不同类型的值在一个单一的实体里。Boost库中的`Tuple`是C++社区广泛使用的工具,因为它提供了灵活且类型安全的方式来组合和传递多个值。本篇文章将探讨如何...

    c++标准库头文件定义

    3. `&lt;vector&gt;`:`&lt;vector&gt;`头文件定义了`std::vector`模板类,这是一个动态数组容器,可以自动调整大小。`std::vector`支持随机访问,且提供了插入、删除和遍历元素的便捷方法。 4. `&lt;algorithm&gt;`:这个头文件包含...

    cpp代码-无类型参数模板

    在定义一个函数模板时,可以使用`template &lt;class T&gt;`声明模板,这里的`T`就是一个无类型参数。例如: ```cpp template &lt;class T&gt; void print(T value) { std::cout &lt;&lt; value &lt;&lt; std::endl; } ``` 上述`...

    C++ ISO 11标准类型

    9. **变长参数模板(Variadic Templates)**:C++11允许函数模板接收任意数量的参数,如`template&lt;typename... Args&gt; void f(Args... args);`,这极大地扩展了模板的使用范围,如`std::tuple`和`std::initializer_...

    C/C++头文件打圈

    - `&lt;utility&gt;`:提供了通用模板类,如`std::pair`、`std::tuple`。 - `&lt;vector&gt;`:STL动态数组容器。 - `&lt;cwchar&gt;`:C++的宽字符头文件,对应C的`&lt;wchar.h&gt;`。 - `&lt;cwctype&gt;`:C++的宽字符分类,对应C的`&lt;wctype...

    C++Templates全览Examples.zip

    涉及到指针的使用,可能演示了模板与指针如何交互,例如智能指针(如`std::unique_ptr`,`std::shared_ptr`)或模板模板参数(用于泛型容器,如`std::vector&lt;std::unique_ptr&lt;T&gt;&gt;`)。 7. **traits**: `traits`...

    电子书 深入理解C++11(PDF)

    9. **变长参数模板(Variadic Templates)**:C++11允许模板参数列表中含有任意数量的参数,这在编写通用函数和模板时非常有用,如`std::tuple`和`std::initializer_list`。 10. **新式异常规范(NRVO)**:改进了...

    C++ Reference Cplusplus.rar

    11. **变长参数模板(Variadic Templates)**:允许创建接受任意数量参数的模板函数,如`std::tuple`和`std::make_tuple`。 12. **统一的构造函数与析构函数调用语法**:允许使用`new T(args)`和`T(args)`创建对象...

    C++0x实现类似于mpl的一个类型容器

    C++0x引入了`std::tuple`和`std::variant`等新类型,以及`template&lt;...&gt; auto`的模板参数,这些都使得构建类型容器变得更加简单和高效。 `vector.hpp`文件可能包含了一个类模板,类似于`std::vector`,但存储的是...

    C++ Templates 完全导引

    例如,如果我们有一个函数模板`template&lt;typename T&gt; void print(T value)`,调用`print&lt;int&gt;(5)`和`print&lt;std::string&gt;("Hello")`会产生两个不同的函数实例。 模板特化是另一种重要的技术,它允许为特定类型提供...

    VS2015中STL源码解析1(霜之小刀)

    1. **固定大小**:`array`的大小在创建时由模板参数指定,不能通过运行时修改。 2. **内存管理**:`array`不使用内存分配器,而是直接在栈上分配内存,因此更高效。 3. **迭代器稳定性**:即使对`array`进行某些操作...

    C++11最新规范

    `中`it`的类型会被推断为`std::vector&lt;std::string&gt;::iterator`。 - **Decltype类型推导**: - `decltype`用于推导表达式的数据类型。 - 例如:`double f();`,通过`decltype(f()) sum = 0;`,推导出`sum`的类型...

    深入理解 C++ 11 PDF文档

    7. **变长参数模板(Variadic Templates)**:变长参数模板允许创建接受任意数量参数的模板函数或类,如`std::tuple`和`std::make_tuple`。 8. **统一的构造/初始化(Uniform Initialization)**:C++ 11引入花括号...

Global site tag (gtag.js) - Google Analytics