Reputation: 131
Or is there a way to get ResponseState::EncoderTag out of class ResponseState?
The code is shown below
#include <iostream>
#include <memory>
#include <string>
using namespace std;
class MirroredMsgRespState
{
public:
virtual ~MirroredMsgRespState(){}
virtual uint32_t encoderTag() const = 0;
};
template<typename RespMsgT, uint32_t EncoderTag>
class ErrorAndEntryResponseState : public MirroredMsgRespState
{
public:
uint32_t encoderTag() const override
{
return EncoderTag;
}
};
using ResponseState = ErrorAndEntryResponseState<int, 48>;
int main()
{
unique_ptr<MirroredMsgRespState> myResp = make_unique<ResponseState>();
cout << myResp->encoderTag() << endl; // func 1
cout << ResponseState::encoderTag() << endl; // func 2
return 0;
}
The current implementation causes the second call to report an error
Upvotes: 0
Views: 54
Reputation:
You could add a static method:
#include <iostream>
#include <memory>
#include <string>
using namespace std;
class MirroredMsgRespState
{
public:
virtual ~MirroredMsgRespState(){}
virtual uint32_t encoderTag() const = 0;
};
template<typename RespMsgT, uint32_t EncoderTag>
class ErrorAndEntryResponseState : public MirroredMsgRespState
{
public:
static uint32_t getEncoderTag()
{
return EncoderTag;
}
uint32_t encoderTag() const override
{
return getEncoderTag();
}
};
using ResponseState = ErrorAndEntryResponseState<int, 48>;
int main()
{
unique_ptr<MirroredMsgRespState> myResp = make_unique<ResponseState>();
cout << myResp->encoderTag() << endl; // func 1
cout << ResponseState::getEncoderTag() << endl; // func 2
return 0;
}
Upvotes: 2