LINUX.ORG.RU

История изменений

Исправление pon4ik, (текущая версия) :

Можно таки сделать шаблонной что то в духе:

template <typename IfaceT, typename IdT>
IfaceT* dispatch(IdT id) {
// search
// throw on failure
// return
}

void super_foo(IdT id, ArgT arg) {
    return dispatch<Foo>(id)->foo(arg);
}

Нафига вообще было заводить интерфейс, что бы потом париться с диспетчеризацией и обёртками, это конечно загадка века, ну может так надо.

Как по мне, в точке вызова лучше делать просто так:

SuperFoo foo;
// ...
foo.dispatch(id)->call(arg);

Исходная версия pon4ik, :

Можно таки сделать шаблонной что то в духе:

template <typename IfaceT, typename IdT>
IfaceT* dispatch(IdT id) {
// search
// throw on failure
// return
}

void super_foo(IdT id, ArgT arg) {
    return dispatch<Foo>(id)->foo(arg);
}

Нафига вообще было заводить интерфейс, что бы потом париться с диспетчеризацией и обёртками, это конечно загадка века, ну может так надо.

Как по мне, в точке вызова лучше делать просто так:

SuperFoo foo;
// ...
foo.dispatch(id)->call(arg);