以下是代码的要点,无法在g ++ 4.7.1上编译
#include <iostream>
using namespace std;
template <typename T> void bottom(T x) {cout << x << " ";}
template <typename Head, typename Tail...>
void recurse(Head h, Tail t) {bottom(h); recurse(t...)}
void recurse(){}
int main() { recurse(1,2.2); }
由于原因未知,“void recurse(){}”未参与模板递归。
寻找线索。
答案 0 :(得分:4)
该代码存在一些语法问题(我怀疑你是否按照Bjarne的书中的那样复制粘贴),但在修复它们之后,似乎主要的问题是{的重载{1}}仅在函数模板recurse()
之后才会显示不接受参数。
在修复问题之前移动它:
recurse()
这是live example。
答案 1 :(得分:2)
有很多错别字。
以下代码不正确
template <typename Head, typename Tail...>
应该是
template <typename Head, typename... Tail>
参数包应使用...
void recurse(Head h, Tail... t)
错过;
,(
和...
(再次)
bottom(h); recurse(t...);
void recurse() {}
,以允许不带参数的调用recurse
。
以下代码有效:
#include <iostream>
using namespace std;
template <typename T>
void bottom(T x)
{
cout << x << " ";
}
void recurse()
{
}
template <typename Head, typename... Tail>
void recurse(Head h, Tail... t)
{
bottom(h);
recurse(t...);
}
int main()
{
recurse(1,2.2);
}