C ++继承模板类

时间:2014-05-18 18:50:33

标签: c++ templates inheritance virtual-method

我有一个奇怪的要求,希望它不会太牵强,可以做到。

我有一个模板类

    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作为编译错误。有没有办法在不需要指定类的情况下完成此操作?也就是说;当我继承Packable时,Player如何选择<class T>作为{{1}}?

2 个答案:

答案 0 :(得分:2)

我想你想要的东西如下:

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

答案 1 :(得分:0)

是的,你需要做

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