我在基类中有一个声明:
template<class PROTOCOL>
static Packet* serialize(uint packetId, QVariantHash data = QVariantHash());
然后,当我从基类继承时,可以这样使用static方法:
GameProtocol::serialize<GameProtocol>(0); // This works fine
我的问题是,为了使
GameProtocol::serialize(0)
调用起作用(即,没有模板声明),我必须更改什么。我想使方法保持静态,因为它简化了基类的其他区域。我知道这很困难,因为静态方法无法在C++中覆盖,但是肯定有一种使用模板魔术的方法。
最佳答案
似乎GameProtocol
恰好是您的派生类:只需添加static
方法serialize()
即可转发到相应版本的基类:
class GameProtocol: public Protocol {
// ...
public:
static Packet* serialize(uint id,
QVariantHash h = QVariantHash()) {
return Protocol::serialize<GameProtocol>(id, h);
}
// ...
};
关于c++ - 如何避免使用类型名称类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29481166/