找不到匹配的重载函数C ++ TEMPLATE
重新调整使用变量模板调用C ++模板函数
void int void foo()
{
}
template <typename T, typename ...U> void foo()
{
foo<U...>();
}
int main()
{
foo<int, char, int>();
return 0;
}
编译代码如:
错误C2672:'foo':没有匹配的重载函数找到注意:请参阅参考函数模板实例化'void foo(void)'正在编译注意:请参阅参考函数模板实例化'void foo(void)'正在编译注意:请参阅参考函数模板实例化'void foo(void)'被编译错误C2783:'void foo(void)':无法推断'T'的模板参数注意:参见'foo'
我宣布void foo(void),为什么发生错误? 编译器可以匹配模板void foo(),但不能匹配void foo(void)
假设你的基本情况是void foo() {}
,在你的递归情况下,你正在执行下面的函数调用:
foo<int, char, int>();
foo<char, int>();
foo<int>();
foo<>();
注意最后一次调用是foo<>();
而不是foo();
。 编译器错误是由于你的void foo() {}
基本情况不能用foo<>();
调用foo<>();
句法。