请帮帮我! 我正在尝试创建一个函数,它接受不同数量的参数,但所有参数都具有相同的类型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提供参数”
答案 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来禁用所有参数都不成对的任何重载。