Вложение классов и предварительное объявление
От: syomin  
Дата: 16.06.06 11:34
Оценка:
Есть такой код:

data.h
======
class Data : public Object {
public:
typedef boost::intrusive_ptr<Data>;

class Visitor {
public:
virtual ~Visitor() {}

operator()(Measure::Ptr measure) {}
};

virtual void apply_visitor(Visitor &visitor) = 0;
};

measure.h
=========
class Measure : public Data {
public:
typedef boost::intrusive_ptr<Measure> Ptr;

void apply_visitor(Visitor &visitor)
{
visitor(Ptr(this));
}
};

Пояснения:
Класс Object реализует подсчет ссылок и предназначен для использования совместно с boost::intrusive_ptr<>.
Разумеется, этот код не компилируется, т.к. в момент обработки data.h компилятор ничего не знает про Measure::Ptr и, следовательно, не компилируется класс Data::Visitor.

Что делать?

P.S. В operator() класса Visitor можно передавать ссылку на Measure — для этого достаточно в data.h добавить строку class Measure;, но хочется передавать имеено Measure::Ptr.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.