【发布时间】:2012-09-12 23:54:09
【问题描述】:
不知何故,我不明白可变参数模板参数包是如何扩展的。以下代码有什么问题?
#include <iostream>
template <typename T>
struct print_one
{
static void run(const T& t)
{
std::cout << t << ' ';
}
};
template<typename... Args>
void print_all(Args&&... args)
{
// the next line doesn't compile:
print_one<Args>::run(std::forward<Args>(args))...;
}
int main()
{
print_all(1.23, "foo");
}
Clang 说,Expression contains unexpanded parameter packs 'Args' and 'args'。为什么?
【问题讨论】:
-
请不要将解决方案编辑到您的问题中,而让它站在提供它的答案中。仅当答案为您提供有关如何解决此问题的提示且未指定确切解决方案时才执行此操作。 :)
-
哦,好的。唯一的区别是
int dummy[] = {...};因为我的编译器不支持初始化列表。 -
哦,抱歉,没看到。也许将其编辑为 ecatmur 的答案? :)(又名将他的第一个示例从
int dummy[]{...}更改为int dummy[] = {...})。 -
那个编辑太短了。我猜他必须自己做。
-
编辑了他的答案。顺便说一句,如果您使用的是 Clang,我建议您更新到最新版本甚至是主干,它支持初始化列表。
标签: c++ templates c++11 variadic-templates