可变参数模板

新手上路,请多包涵

我看过很多介绍可变参数模板的链接。但我从未见过任何演示这种方法的可编译示例。

有人可以为我提供一些可以找到此类可编译示例的链接吗?

原文由 sami 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 492
2 个回答

可变参数模板是尚未正式发布的 C++0x 标准的一部分。 gcc 从 4.3 版开始支持它们,但您需要通过添加编译器开关 -std=c++0x 来启用对 C++0x 的支持。

原文由 David Feurle 发布,翻译遵循 CC BY-SA 2.5 许可协议

最简单的示例之一是 max 的以下实现,它甚至没有在类型上进行模板化。

 int maximum(int n)
{
    return n;
}

template<typename... Args>
int maximum(int n, Args... args)
{
    return max(n, maximum(args...));
}

只有稍微复杂一点的是规范的 printf 实现:

 void printf(const char *s)
{
  while (*s)
  {
    if (*s == '%' && *(++s) != '%')
      throw "invalid format string: missing arguments";
    std::cout << *s++;
  }
}

template<typename T, typename... Args>
void printf(const char* s, T value, Args... args)
{
  while (*s)
  {
    if (*s == '%' && *(++s) != '%')
    {
      std::cout << value;
      printf(s, args...); // call even when *s == 0 to detect extra arguments
      return;
    }
    std::cout << *s++;
  }
  throw "extra arguments provided to printf";
}

原文由 Motti 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题