我在基类中有一个声明:

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/

10-15 01:38