Класс B имеет функцию обратного вызова B::callback(), которая генерирует данные, которые должны быть дополнительно обработаны C::foo() и, наконец, D::foo().< /p>
Код: Выделить всё
Class A{
public:
void f(){
B.run();
//C.run();
//D.run();
}
private:
B b;
C c;
D d;
};
Код: Выделить всё
Class B{
public:
void run(){
set_process(callback,void* arg); // external_lib::set_process
}
void callback(){
data = get_data();
}
private:
float *data;
};
Код: Выделить всё
Class C{
public:
void foo(){
// process data
}
};
Код: Выделить всё
Class D{
public:
void foo(){
// final process data
}
};
Как следует спроектировать поток данных, чтобы данные могли обмениваться данными между B, C и D?
Мое нынешнее решение является наивным:
Определив статическую функцию, не являющуюся членом, void helper(), которая вызванный внутри B::callback(), я могу вызвать C::foo() и D::foo(), используя указатели на функции-члены следующим образом:
Код: Выделить всё
void helper(float* data,void* args){
static_cast(args)->foo(data);
static_cast(args)->foo(data);
}
Class A{
//...
};
Код: Выделить всё
void B::callback(){
data = get_data();
void *args = nullptr;
helper(data,args);
}
Код: Выделить всё
A::helper()
Подробнее здесь: https://stackoverflow.com/questions/785 ... nt-classes