【发布时间】:2018-01-22 13:06:55
【问题描述】:
当我直接从共享库类模板继承时,我得到“未解析的外部符号”,但如果我首先在我的代码中专门化库模板,它工作正常。
共享库中的模板类:
template <typename T>
class EventHandler
{
public:
virtual ~EventHandler();
virtual EventResult ReceiveEvent(T * evn, EventDispatcher<T> * dispatcher) = 0;
};
我的代码中的派生类(没有专门化就无法工作):
class MyEventHandler : public EventHandler<SomeEventType>
{
public:
virtual EventResult ReceiveEvent(SomeEventType * evn, EventDispatcher<SomeEventType> * dispatcher);
};
我的代码中的专用库模板类:
template <>
class EventHandler<SomeEventType>
{
public:
virtual ~EventHandler() {}
virtual EventResult ReceiveEvent(SomeEventType * evn, EventDispatcher<SomeEventType> * dispatcher) = 0;
};
我尝试直接在共享库的代码中复制它(我有源代码),它在没有模板专业化的情况下运行良好。它是否与 lib 无法访问完整的类实现有关?在这种情况下,EventHandler 模板在 .cpp 中没有任何附加定义,因为它只是一种纯虚方法。
如果重要的话,我的派生类也在命名空间内。
[EDIT] EventHandler 的类模板在 .cpp 文件中没有任何额外的实现,上面发布的 .h 文件中的这个定义就是它所做的一切(一个纯虚函数)。它与建议为可能重复的线程无关。
【问题讨论】:
-
@GuillaumeRacicot 添加了解释为什么我的问题不是“可能重复”
-
啊。那么你的函数只需要一个实现
标签: c++ templates inheritance linker shared-libraries