使用变量模板重新调用C ++模板函数
void int void foo()
{
}
template <typename T, typename ...U> void foo()
{
foo<U...>();
}
int main()
{
foo<int, char, int>();
return 0;
}
编译meesage如:
错误C2672:'foo':找不到匹配的重载函数 注意:请参阅正在编译的函数模板实例化'void foo(void)'的引用 注意:请参阅正在编译的函数模板实例化'void foo(void)'的引用 注意:请参阅正在编译的函数模板实例化'void foo(void)'的引用 错误C2783:'void foo(void)':无法推断'T'的模板参数 注意:请参阅'foo'的声明
我声明了void foo(void),为什么会出错? complier可以匹配模板void foo(),但不能匹配void foo(void)
答案 0 :(得分:4)
假设您的基本案例是void foo() {}
,在递归的情况下,您正在执行以下函数调用:
foo<int, char, int>();
foo<char, int>();
foo<int>();
foo<>();
请注意,上次调用是foo<>();
而不是foo();
。
编译器错误是由于你的基本情况
无法使用void foo() {}
语法调用foo<>();
。