问题描述
我正在开发一个共享库(Linux 和 Windows,当前测试在 Linux 上使用 gcc 运行)。这个库的一部分是一个非常复杂的命令行解析器,使用类模板和普通类。
继承路径是这样的(我这里省略了命名空间):
// normal class for polymorphism
class _tArgTypeBaseClass;
// class template (CRTP idea) for implementing common code
template<class C,typename T> class _tArg : public _tArgTypeBaseClass;
// example class (multiple types have been implemented
class TIntegerValueList : public _tArg<TIntegerValueList,int32_t>
// template class to implement non list specialization
template<class PARENT,typename T> class _tArgNoList : public PARENT
// typedef (currently typedef,I kNow I Could be using "using")
typedef _tArgNoList<TIntegerValueList,uint32_t> TIntegerValue;
在这个类树中,简单的模板方法在头文件中实现,但更复杂的方法在 cpp 单元文件中。
目前,我正在使用 google test 测试库,并且过去一切正常,即 cpp 方法都可用于 google 测试程序来运行其测试。这些测试目前都只使用 TIntegerValueList(还没有其他类型,也没有 T...Value 特化。
我还必须注意,所有 _tArg 模板方法过去都是在基类 _tArgTypeBaseClass 中声明为纯虚拟的虚方法。
现在我对类树做了一些更改,最终测试程序不再链接,链接器报告对 _tArg
引入该问题的更改可能是现在我将一种方法更改为非虚拟方法,因为它变得依赖于类型。请注意,这是 TIntegerValueList 的方法(不是模板 _tArg)。所以我注释掉了纯虚方法声明,并从 TxxxValueList 类中的实际方法中删除了 override 关键字。
有人解释为什么会发生这种情况吗?
PS:我知道我可以通过模板类 _tArg
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)