【发布时间】:2021-11-17 14:08:06
【问题描述】:
这让我想知道。假设我有:
class Base
{
public:
template<typename T>
void foo(T& varT)
{
//
}
template<typename T, typename U>
void foo(T& varT, U& varU)
{
//
}
};
class Child : public Base
{
public:
template<typename T, typename U, typename Z>
void foo(T& varT, U& varU, Z& varZ)
{
//
}
};
现在当我尝试这个时:
Child c;
char cVar;
int iVar;
float fVar;
c.foo(cVar);
c.foo<int>(cVar);
c.template foo<int>(cVar);
所有调用都不起作用。它们总是被错误“没有匹配的调用成员函数”所掩盖。谁能指出我解决这个问题的方法?我在标准中读到派生对象影子模板函数继承,但标准明确指出,如果它们被影子,参数列表必须相同。
感谢您的帮助。
【问题讨论】:
-
“但标准明确规定,如果参数列表被遮蔽,则必须相同” 错误。这是覆盖虚函数所必需的。
标签: c++ templates inheritance