Звучит так, как будто вы должны взглянуть на шаблон проектирования Visitor: http://en.wikipedia.org/wiki/Visitor_pattern
Это не совсем тот же подход, но я верю, если вы определите метод Visit(Worker)
для класса Leader
и *Метод 1006 * в классе Worker
, который затем вызывает private M()
, позволяет получить требуемую функциональность.
Учитывая, что мое сообщение было отклонено, я решил, что это может помочь, если я дам немного большеинформация:
class Leader;
class Worker
{
virtual void M() = 0;
public:
void Accept( const Leader & w)
{
M();
}
};
class Leader
{
public:
void Visit ( Worker & w) const
{
w.Accept(*this);
}
};
class MyWorker : public Worker
{
virtual void M()
{
std::cout << "M()" << std::endl;
}
};
int main(int argc, char **argv)
{
Leader l;
MyWorker myW;
myW.Accept(l)
return 0;
}
Единственный способ вызвать M()
- это использование Leader
, Worker
- абстрактный класс, который даже не может быть создан, хотя вы можете предоставитьповедение по умолчанию для M()
, если хотите.