Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;继承模板类_C++_Templates_Inheritance_Virtual Functions - Fatal编程技术网

C++ C++;继承模板类

C++ C++;继承模板类,c++,templates,inheritance,virtual-functions,C++,Templates,Inheritance,Virtual Functions,我有一个特别的要求,希望不是太牵强,可以做到 我有一个模板类 template<class T> class Packable { public: // Packs a <class T> into a Packet (Packet << T) virtual sf::Packet& operator <<(sf::Packet& p) const = 0; f

我有一个特别的要求,希望不是太牵强,可以做到

我有一个模板类

    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);
    };
这样,玩家现在就有了所有的操作符

到目前为止,我将
预期的类名
作为编译错误。有没有一种不需要指定类就可以实现的方法?就是说,;当我继承它时,
Packable
如何将
Player
作为
拾取?

是的,您需要这样做

template <typename T>
class Player: public Packable<T>
{
...
}
模板
类播放器:公共可打包
{
...
}

我想你想要的东西如下:

class Player: public Packable<Player>
    //...
class播放器:公共可打包
//...

阅读有关的内容。通常必须指定
播放器两次。避免这样做的唯一方法(同时使用相同的设计)是使用预处理器,这将是非常可怕的!谢谢@Appleshell。太糟糕了,它不能有点干净,但是,这是C++:我没有忘记,不要担心!如果我有一个后续问题或其他信息(名称空间),我应该提出一个新问题还是修改这个问题?@Volte观点不同(),但我认为为后续问题创建一个新问题是好的。:)
class Player: public Packable<Player>
    //...