【发布时间】:2010-05-05 10:18:52
【问题描述】:
有问题的项目是关于相互通信的不同端点。端点发送事件(超出当前问题的范围)并且可以处理传入事件。每个事件在一个通用对象中表示如下:
#pragma interface
... // some includes
template<typename T>
class Event
{
public:
Event(int senderId, Type type, T payload); // Type is an enum
Event(int senderId, Type type, int priority, T payload);
virtual ~Event();
virtual int getSenderId();
virtual int getPriority();
virtual T getPayload();
void setPriority(const int priority);
protected:
const int senderId;
const Type type;
const T payload;
int priority;
};
它的实现类带有#pragma implementation 标签。
端点定义如下:
#pragma interface
#include "Event.h"
template<typename T>
class AbstractEndPoint
{
public:
AbstractEndPoint(int id);
virtual ~AbstractEndPoint();
virtual int getId();
virtual void processEvent(Event<T> event) = 0;
protected:
const int id;
};
它也有自己的实现类,但只定义了构造函数、析构函数和getId()。
这个想法是为每种不同的有效负载类型创建具体的端点。因此,我对每种类型都有不同的有效负载对象和特定的事件类,例如
Event<TelegramFormatA>, Event<TelegramFormatB>
和
ConcreteEndPoint for TelegramFormatA,
ConcreteEndPoint for TelegramFormatB
分别。后面的类被定义为
class ConcreteEndPoint : AbstractEndPoint<TelegramFormatA>
{
...
}
我正在使用 g++ 4.4.3 和 ld 2.19。一切都编译得很好,但是链接器抱怨未定义对特定类型事件类的引用,例如
Event<TelegramFormatA>::Event(....) .
我尝试使用显式实例化
template class AbstractEndPoint<TelegramFormatA>;
但无法克服上述链接器错误。
任何想法都将不胜感激。
【问题讨论】:
标签: c++ inheritance templates