【发布时间】:2014-05-18 18:50:33
【问题描述】:
我有一个特殊的要求,希望它不会太牵强并且可以完成。
我有一个模板类
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
{
//...
}
这样,Player 现在已经为它重载了所有这些运算符。
截至目前,我收到 Expected class name 作为编译错误。有没有办法在不需要指定类的情况下做到这一点?也就是说; Packable 继承了Player 怎么能接<class T> 呢?
【问题讨论】:
-
必须指定
Player两次是很常见的。避免这样做的唯一方法(同时使用相同的设计)是使用预处理器,这将是可怕的。
标签: c++ templates inheritance virtual-functions