Witam
Prosze o pomoc bo nie mogę sobie poradzić z problemem czemu poniższy kod sie nie kompiluje.
Wywala się error: "explicit specialization in non-namespace scope" przy liniach (*)
Jak wywalę z klasy deklaracje specjalizacji templetów to wtedy mamy multiple definition issue.
HardwareTalker:
class HardwareTalker
{
public:
HardwareTalker();
virtual ~HardwareTalker();
template <typename TRequest>
bool send(const DPDMessage<TRequest> &req)
{
//implemetacja
}
template <typename TRequest>
CRFCtrl_UDPToken sendAndWaitForResponse(const DPDMessage<TRequest> &req)
{
//implemetacja
}
template <typename TRequest>
CRFCtrl_UDPToken sendAndWaitForResponse(const DPDMessage<TRequest> &req, const u32 timeout)
{
//implemetacja
}
};
HardwareTalkerMock.hpp:
class HardwareTalkerTemplateWrknd : public HardwareTalker
{
public:
HardwareTalkerTemplateWrknd():HardwareTalker() {};
virtual ~HardwareTalkerTemplateWrknd() {};
template <typename TRequest>
bool send(const DPDMessage<TRequest> &req)
{
HardwareTalker::send<TRequest>(req);
}
template <typename TRequest>
CRFCtrl_UDPToken sendAndWaitForResponse(const DPDMessage<TRequest> &req)
{
HardwareTalker::sendAndWaitForResponse<TRequest>(req);
}
template <typename TRequest>
CRFCtrl_UDPToken sendAndWaitForResponse(const DPDMessage<TRequest> &req, const u32 timeout)
{
HardwareTalker::sendAndWaitForResponse<TRequest>(req, timeout);
}
//(*)
template <> bool send(const DPDMessage<TransmitON_OFFResponse> &req);
template <> CRFCtrl_UDPToken sendAndWaitForResponse(const DPDMessage<TransmitON_OFFResponse> &req);
template <> CRFCtrl_UDPToken sendAndWaitForResponse(const DPDMessage<TransmitON_OFFResponse> &req, const u32 timeout);
//(*)
//TransmitON_OFFResponse
bool sendTransmitOnOff(const DPDMessage<TransmitON_OFFResponse> &req) { return false; }
CRFCtrl_UDPToken sendAndWaitForResponseTransmitOnOff(const DPDMessage<TransmitON_OFFResponse> &req) { return CRFCtrl_UDPToken(); }
CRFCtrl_UDPToken sendAndWaitForResponseTransmitOnOff(const DPDMessage<TransmitON_OFFResponse> &req, const u32 timeout) { return CRFCtrl_UDPToken(); }
};
w HardwareTalkerMock.cpp:
#include "HardwareTalkerMock.hpp"
template <>
bool HardwareTalkerTemplateWrknd::send(const DPDMessage<TransmitON_OFFResponse> &req)
{
return sendTransmitOnOff(req);
}
template <>
CRFCtrl_UDPToken HardwareTalkerTemplateWrknd::sendAndWaitForResponse(const DPDMessage<TransmitON_OFFResponse> &req)
{
return sendAndWaitForResponseTransmitOnOff(req);
}
template <>
CRFCtrl_UDPToken HardwareTalkerTemplateWrknd::sendAndWaitForResponse(const DPDMessage<TransmitON_OFFResponse> &req, const u32 timeout)
{
return sendAndWaitForResponseTransmitOnOff(req, timeout);
}