История изменений
Исправление 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);