gpt4 book ai didi

c++ - 未知参数数量函数中的 va_arg 错误

转载 作者:行者123 更新时间:2023-11-28 07:26:52 25 4
gpt4 key购买 nike

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

最佳答案

使用模板化重载:

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

关于c++ - 未知参数数量函数中的 va_arg 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18624790/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com