美文网首页
第四章:可变参数模板

第四章:可变参数模板

作者: 找不到工作 | 来源:发表于2021-01-19 21:30 被阅读0次

    可以接受任何个数的参数称为可变参数模板。

    4.1 可变参数模板

    例如,可以用如下程序实现一个打印输入的参数的函数:

    void myPrint() {}
    
    template<typename T, typename... Types>
    void myPrint(T firstArg, Types&&... args)
    {
      std::cout << firstArg << std::endl;
      myPrint(std::forward<Types>(args)...);
    }
    

    重点是:

    1. 使用 ... 来表明可变参数
    2. 递归终止条件
      可以看到有一个不带参数的 myPrint()

    其工作原理是生成了多个参数个数不同的 myPrint() 函数,并调用直到没有未使用的参数。

    4.2 fold expressions

    c++17 语法,略

    4.3 可变参数模板应用

    可变参数模板在一些通用库中频繁使用,例如 c++ 标准库。举几个例子:

    // smart pointer, pass 4.2 and 7.7 to construct a complex
    auto sp = std::make_shared<std::complex<float>>(4.2, 7.7);
    
    // thread, call foo(42, "hello") in another thread
    std::thread t(foo, 42, "hello");
     
    // insert Customer("Tim", "Jovi", 1962)
    std::vector<Customer> v;
    v.emplace_back("Tim", "Jovi", 1962);
    

    这些实现都用了“完美转发”(&&)。

    相关文章

      网友评论

          本文标题:第四章:可变参数模板

          本文链接:https://www.haomeiwen.com/subject/nnuczktx.html