0

请帮帮我!我正在尝试制作一个函数,它采用不同数量的参数,但所有参数都具有相同类型的 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 的参数不足”

4

1 回答 1

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 禁用并非所有参数都是对的任何重载。

于 2013-09-04T22:26:46.623 回答