调用基函数时模板参数推导失败
template argument deduction failed when calling base function
以下C++代码会产生编译错误。
编译器(gcc 5.2.0(在第15行抱怨说,它找不到用于调用"Derived::test_func(("的匹配函数;然而,如果test_func((从Base移到Derived,它编译时不会出错。
class Base {
public:
int test_func();
};
class Derived : public Base {
public:
template <typename T>
int test_func(T t);
};
template <typename T>
int Derived::test_func(T t)
{
test_func(); // line 15
return 0;
}
int Base::test_func()
{
return 0;
}
如果template函数调用基类中具有不同名称(与template函数名称不同(的其他函数,如以下代码所示,则它也可以编译得很好。
class Base {
public:
int test_func_diff_name();
};
class Derived : public Base {
public:
template <typename T>
int test_func(T t);
};
template <typename T>
int Derived::test_func(T t)
{
test_func_diff_name();
return 0;
}
int Base::test_func_diff_name()
{
return 0;
}
为什么会这样?C++中从模板调用基函数时指定的约束是什么?有人能给我指一些资源吗?
在C++中,派生类中不覆盖基类中函数但具有相同名称的函数隐藏基类中具有相同名称的所有其他函数。
通常最好给不同的函数取不同的名称。
如果你真的需要它,你可以通过完全限定名称来调用基类的函数,比如Base::test_func();
或者使用using Base::test_func;
将基类的名称显式引入当前类
相关文章:
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- variadic模板中的模板参数推导失败
- 当给定默认值时,为什么此模板参数推导失败
- 模板参数推导失败,函数参数/参数不匹配
- 为什么模板参数推导失败?
- 嵌套参数包扩展失败
- 模板参数的 C++ 自动模板推导失败
- 调试模板时出现问题.专门针对 Linux GCC 7、GCC 6、GCC 5、GCC 4.9 错误构建失败:模板参数 1
- 使用显式模板参数列表和 [temp.arg.explicit]/3 的函数调用的演绎失败
- 失败,出现错误 87:参数不正确.如何判断哪个参数不正确?
- 在 g++ 6.2.1 中将参数包转发到 constructor() 失败
- 当变量和参数名称匹配时,移动语义构造失败
- 作为模板参数的成员函数指针在继承的成员函数上失败,如何以及为什么?
- 模板参数推导/替换失败,lambda作为函数指针
- 调用基函数时模板参数推导失败
- 类模板参数推导失败会导致替换失败
- 折叠表达式模板参数推导/替换失败
- 结果失败或多个参数无效