Variadic模板将使某些类型的功能重新撰写成为更清洁的、类型的安全版本。 The case of
void printf(const char *s)
{
while (*s) {
if (*s == % && *(++s) != % )
throw std::runtime_error("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;
++s;
printf(s, args...); // call even when *s == 0 to detect extra arguments
return;
}
std::cout << *s++;
}
throw std::logic_error("extra arguments provided to printf");
}
但......根据我的理解,这些模板意味着每类组合的代码重复。 因此,将多次复制上述<编码>印本/代码>。 这对大型职能或班级来说可能很可怕。
Are variadic template as perilous as standard templates for code duplication? If yes, can the inheritance trick still help?