[英]C++ gcc function template overload compiler issue
我有一个类,它具有几个这样定义的成员函数:
template <class T> void query(std::vector<T>& retVec, ... rest of params)
{
// get raw results
DBCursor results = ...;
// convert results
this->fillVector(retVec, results);
}
其中fillVector()具有非模板化版本和模板化重载:
void fillVector(std::vector<RawQueryType>& retVec, const DBCursor& results);
template <class T>
void fillVector(std::vector<T>& retVec, const DBCursor& results);
我在非模板化 fillVector实现中有一个错误,但是很多代码都使用了模板化重载。 我的想法是,尽管对非模板fillVector的修复将需要大量重新编译,但使用模板化版本的所有内容所产生的.so共享库文件仍然相同。 重新编译后,我观察到的是库文件实际上是不同的。
所以我的问题是,这是正确的假设吗? 如果没有,那为什么不呢? 如果是的话,那意味着我可能正在将非模板化版本称为我认为不是的某个地方?
编译器是g ++ 4.8.1
二进制文件是不同的,因为您更改了代码。 尽管没有在代码中使用/调用非模板化函数,但仍在其中。
您可以使用以下命令在二进制文件中列出符号:
nm -anC <binary> | grep fillVector
对于非模板,应该看到一个符号,对于模板功能的每种不同用法,应该看到一个符号。 有关更多信息,请参见本指南 (尤其是模板实例化)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.