Имам една странна молба, надявам се, че не е твърде пресилена и може да бъде изпълнена.
Имам шаблонен клас
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
два пъти. Единственият начин да избегнете това (докато използвате същия дизайн) е да използвате препроцесора, което би било отвратително. - person Mankarse   schedule 18.05.2014