未知参数数量函数中的va_arg错误

时间:2013-09-04 22:24:01

标签: c++ variadic-functions

请帮帮我! 我正在尝试创建一个函数,它接受不同数量的参数,但所有参数都具有相同的类型std :: pair

这是一段代码:

void pro(std::pair<int, int*> p, ...)

{
va_list uk_arg;
va_start(uk_arg,p);
std::pair<int,int*> l;
while((l = va_arg(uk_arg,std::pair<int,int*>))!=-1)
{
  show(l.first);
  show(*l.second);
}
  va_end(uk_arg);
}

但是这段代码不起作用。我收到一个错误,比如“没有为类模板std :: pair提供参数”

1 个答案:

答案 0 :(得分:1)

使用模板化过载:

void pro() { }

template <typename P, typename ...Rest>
void pro(P const & p, Rest const &... rest)
{
    show(p.first);
    show(*p.second);

    pro(rest...);
}

您可以添加不同数量的检查,您的参数是成对的;这一切都取决于你需要什么。不过,这应该是第一次尝试。如果你想要一个误用的早期编译器错误,你可以写:

template <typename T1, typename T2, typename ...Rest>
void pro(std::pair<T1, T2> const & p, Rest const &... rest)

更高级的版本会使用SFINAE来禁用所有参数都不成对的任何重载。