第四章:可变参数模板

2021-01-19  本文已影响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);

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

上一篇 下一篇

猜你喜欢

热点阅读