【发布时间】:2023-04-04 05:20:01
【问题描述】:
如果我使用给定的类 MyClass 或任何派生类 MyClassDer 调用它,我正在尝试重载某些模板函数以执行特定操作。代码如下:
#include <iostream>
struct MyClass {
virtual void debug () const {
std::cerr << "MyClass" << std::endl;
};
};
struct MyClassDer : public MyClass {
virtual void debug () const {
std::cerr << "MyClassDer" << std::endl;
};
};
template <typename T> void func (const T& t) {
std::cerr << "func template" << std::endl;
}
void func (const MyClass& myClass) {
std::cerr << "func overloaded" << std::endl;
myClass.debug ();
}
int main(int argc, char **argv) {
func (1);
MyClass myClass;
func (myClass);
MyClassDer myClassDer;
func (myClassDer);
}
输出是:
func template
func overloaded
MyClass
func template
func (myClassDer) 调用模板函数而不是 void func (const MyClass& myClass)。我该怎么做才能获得预期的行为?
谢谢
【问题讨论】:
标签: c++ templates inheritance sfinae overload-resolution