当我直接从共享库类模板继承时,我得到"未解析的外部符号",但如果我首先在我的代码中专门化库模板,它工作正常.
共享库中的模板类:
template <typename T>
class EventHandler
{
public:
virtual ~EventHandler();
virtual EventResult ReceiveEvent(T * evn, EventDispatcher<T> * dispatcher) = 0;
};
Run Code Online (Sandbox Code Playgroud)
我的代码中的派生类(没有专门化就无法工作):
class MyEventHandler : public EventHandler<SomeEventType>
{
public:
virtual EventResult ReceiveEvent(SomeEventType * evn, EventDispatcher<SomeEventType> * dispatcher);
};
Run Code Online (Sandbox Code Playgroud)
我的代码中的专业库模板类:
template <>
class EventHandler<SomeEventType>
{
public:
virtual ~EventHandler() {}
virtual EventResult ReceiveEvent(SomeEventType * evn, EventDispatcher<SomeEventType> * dispatcher) = 0;
};
Run Code Online (Sandbox Code Playgroud)
我尝试直接在共享的lib的代码中复制它(我有源代码),并且没有模板专业化它工作正常.是否与lib无关,无法访问全班实现?在这种情况下,EventHandler模板在.cpp中没有任何其他定义,因为它只是一个纯虚方法.
如果重要的话,我的派生类也在命名空间内.
[EDIT]类模板EventHandler在.cpp文件中没有任何附加实现,上面从.h文件发布的这个定义就是它所做的一切(一个纯虚函数).它与线程建议无关,可能重复.
我正在尝试用float变量的内存地址填充byte/char数组(数组长度是4个字节=指针),但无论我做什么它都会保持浮点值而不是地址:
float f = 20.0f;
memcpy(data, &f, sizeof(data));
Run Code Online (Sandbox Code Playgroud)
调试它:
printf("Array: %#X, %#X, %#X, %#X", data[0], data[1], data[2], data[3]);
Run Code Online (Sandbox Code Playgroud)
...以十六进制格式给出浮点值(20.0):
Array: 0, 0, 0XA0, 0X41
Run Code Online (Sandbox Code Playgroud)
我需要的是float的内存地址.我尝试以某种不同的方式进行铸造/解除引用,但无法使其工作......