Вот что я хотел бы сделать:
class Msg {
int target;
public:
Msg(int target): target(target) { }
virtual ~Msg () { }
virtual MsgType GetType()=0;
};
inline std::ostream& operator <<(std::ostream& ss,Msg const& in) {
return ss << "Target " << in.target;
}
class Greeting : public Msg {
std::string text;
public:
Greeting(int target,std::string const& text) : Msg(target),text(text);
MsgType GetType() { return TypeGreeting; }
};
inline std::ostream& operator <<(std::ostream& ss,Greeting const& in) {
return ss << (Msg)in << " Text " << in.text;
}
К сожалению, это не работает, поскольку приведение к Msg во второй последней строке завершается неудачно, поскольку Msg является абстрактным. Однако я хотел бы иметь код для вывода информации для родителя только в одном месте. Как правильно это сделать? Спасибо!
РЕДАКТИРОВАТЬ: Извините, просто чтобы быть ясно, это эта строка return ss << (Msg)in << " Text " << in.text;
Я не знаю, как писать.