【发布时间】:2021-07-19 00:18:51
【问题描述】:
我正在尝试使用 C++ 中的可变参数模板使用一个非常简单的日志函数:
void log(){}
template <typename T, typename... Types>
void log(T first, Types... arg)
{
std::cout << first << " ";
log(arg...);
}
int main()
{
log(1,2);
log(3, "four");
log(5);
log(6,"seven",8,9,10,11,12);
log(13,14);
}
但在输出中,如果它们是整数(2、5、12 和 14),我会丢失 log 函数的所有最后一个参数,但如果它们是字符串(“四个”)!??。这是为什么?我做错了什么?
output: 1 3 four 6 seven 8 9 10 11 13
【问题讨论】:
-
Cannot reproduce。您使用的是什么编译器和命令行开关?
-
Can't reproduce,或者。您只需要调试代码以找出不起作用的调用发生了什么。
-
感谢@PaulSanders,这很吓人,我不知道使用什么特别的东西。它是最近安装的 Visual Studio 2021 中的一个新项目,没有任何进一步的修改。我也尝试了 VS2019 并得到了相同的结果。
-
我可以在 VS 2019 上确认问题,并且似乎没有任何明显的解决方法。看起来像一个 MSVC 错误,尽管很难看出如此明显的问题是如何逃脱他们的注意的。
-
同意,如果它真的是一个错误,那就太疯狂了。无论如何,我现在将摆脱可变参数函数:DD 谢谢。
标签: c++ templates variadic-templates