【发布时间】:2016-10-26 00:45:07
【问题描述】:
我有这样的代码:
class Client2ServerProtocol {
};
class ProtocolHelper {
public:
template<class ProtocolClass>
int GetProtocolId() {
return -1;
}
};
template<> inline int
ProtocolHelper::GetProtocolId<Client2ServerProtocol>() {
return 1;
}
template<typename PROTOCOL_HELPER>
class Dispatcher {
public:
template<typename PROTOCOL_CLASS>
void Subscribe(int msgId) {
int protoId = helper.GetProtocolId<PROTOCOL_CLASS>();
printf("Subscribe protoId %d, msgId %d", protoId, msgId);
}
PROTOCOL_HELPER helper;
};
int main() {
Dispatcher<ProtocolHelper> dispatcher;
dispatcher.Subscribe<Client2ServerProtocol>(1);
return 0;
}
它在 MSVC 下编译成功(并且可以工作),但 gcc 抱怨语法无效:
test.cc:23:56: 错误:“>”标记之前的预期主表达式 int protoId = helper.GetProtocolId();
test.cc:23:58: 错误:')' 标记之前的预期主表达式
我做错了什么? int protoId = helper.GetProtocolId();
【问题讨论】:
标签: c++ templates generic-programming