Я нахожусь в такой ситуации:
class Callee {
public:
void request();
};
class Caller {
void call() {
Callee{}.request();
}
void invoke1(); // the implementation doesn't matter
void invoke2(); // the implementation doesn't matter
// more invoke()s
};
Я хочу Callee::request()
запросить вызов одной из Caller::invoke()
функций-членов в зависимости от контекста, который может быть вычислен либо в Callee::request()
или Caller::call()
:
void Callee::request() {
// do stuff
switch (context) {
// request one of the invoke()s to be run immediately
}
// do more stuff
}
Какие решения будут элегантными? Я не хочу (от самого важного до наименее важного):
Callee
знать определение Caller
; - использовать шаблоны;
Callee
знать объявление Caller
; Caller
для выбора invoke()
самостоятельно;
Это нормально, если Callee::request()
получает некоторые аргументы от Caller
.