C++继承模板类

C++ inherit template class

本文关键字:继承 C++      更新时间:2023-10-16

我有一个特殊的请求,希望它不会太牵强,可以完成。

我有一个模板类

    template<class T> class Packable
    {
    public:
        // Packs a <class T> into a Packet (Packet << T)
        virtual sf::Packet& operator <<(sf::Packet& p) const = 0;
        friend sf::Packet& operator <<(sf::Packet& p, const T &t);
        friend sf::Packet& operator <<(sf::Packet& p, const T *t);

        // Packs a Packet into a <class T> (T << Packet)
        virtual T operator <<(sf::Packet& p) const = 0;
        friend T& operator <<(T &t, sf::Packet& p);
        friend T* operator <<(T *t, sf::Packet& p);
        // Unpacks a Packet into a <class T> (Packet >> T)
        virtual sf::Packet& operator >>(sf::Packet& p) const = 0;
        friend sf::Packet& operator >>(sf::Packet& p, T &);
        friend sf::Packet& operator >>(sf::Packet& p, T* t);
    };

我希望能够像一样使用它

class Player : public Packable
{
    //...
}

这样,玩家现在已经超载了所有的运营商。

到目前为止,我得到的Expected class name是一个编译错误。有没有一种方法可以在不需要指定类的情况下实现这一点?也就是说;当我继承Player时,Packable如何将其作为<class T>

我想您想要以下内容:

class Player: public Packable<Player>
    //...

是的,您需要进行

template <typename T>
class Player: public Packable<T>
{
...
}