Интерфейс, реализация и boost::enable_shared_from_this
От: Wody  
Дата: 20.07.11 04:45
Оценка:
Как правильно разделить интерфейс и реализацию, учитывая, что в реализации нужно вызывать shared_from_this, для бинда к приватным членам (которые отсутствуют в базовом классе интерфейса)?
Вариант 1:

class interface: public boost::enable_shared_from_this<interface>
{
public:
 virtual void f() = 0;
 ~interface() {}
};

class implementation: public interface
{
public:
 void f();
private:
 void g();
}

Но тогда shared_from_this возвращает указатель на интерфейс и его приходится приводить к указателю на реализацию.

Вариант 2:
class interface
{
public:
 virtual void f() = 0;
 ~interface() {}
};

class implementation: public boost::enable_shared_from_this<implementation>, public interface
{
public:
 void f();
private:
 void g();

Вроде бы это решает проблему, но боюсь граблей
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.