我在一个类中声明了一个模板成员函数,该函数根据类型调用正确的成员函数,并且希望通过添加成员函数在子类中向其添加一些功能,如下面的 main.cpp 示例所示:
#include <iostream>
class A
{
public:
template <typename T>
void handleSocketData(const T& t)
{
handleData(t);
}
void handleData(int data)
{
std::cout << data << std::endl;
}
};
class B: public A
{
public :
void handleData(std::string data) const
{
std::cout << data << std::endl;
}
};
int main(int argc, char *argv[])
{
A a;
B b;
a.handleSocketData<int>(30);
b.handleSocketData<std::string>("Hi");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,b.handleSocketData<QString>("Hi");实际上确实在 A 类中生成了一个新的模板实例,如命令的输出所示/usr/bin/clang++ -DQT_CORE_LIB -isystem /usr/include/qt6/QtCore -isystem /usr/include/qt6 -isystem /usr/lib64/qt6/mkspecs/linux-g++ -g -std=gnu++17 -Xclang …