繁体   English   中英

C ++ gcc函数模板重载编译器问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM