Как правильно разделить интерфейс и реализацию, учитывая, что в реализации нужно вызывать 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();
Вроде бы это решает проблему, но боюсь граблей