我看过很多介绍可变参数模板的链接。但我从未见过任何演示这种方法的可编译示例。
有人可以为我提供一些可以找到此类可编译示例的链接吗?
原文由 sami 发布,翻译遵循 CC BY-SA 4.0 许可协议
最简单的示例之一是 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 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
1 回答1.6k 阅读✓ 已解决
可变参数模板是尚未正式发布的 C++0x 标准的一部分。 gcc 从 4.3 版开始支持它们,但您需要通过添加编译器开关 -std=c++0x 来启用对 C++0x 的支持。