Предположим, у меня есть:
template<typename T>
class A {
typedef T t_type;
void done_work();
};
template<typename T>
class B {
typedef T t_type;
void do_work(){
// adds work to an asynchronous event queue, eventually T.done_work() is called
}
};
template<typename T>
class C {
typedef T t_type;
void do_work(){
// adds work to an asynchronous event queue, eventually T.done_work() is called
}
};
typedef A<B<A > > a_with_b;
typedef A<C<A > > a_with_C;
void main(int argc, char** argv){
a_with_b awb;
a_with_c awc;
}
Как мне разрешить typedef a_with_b ?
Я хочу сделать это, потому что A имеет обратный вызов B, а B имеет обратный вызов A. Например, A вызовет B.do_work (), и в конечном итоге B вызовет A.done_work (). Более того, каждый из них является асинхронным вызовом, поэтому я не могу просто вызвать B.do_work () и подождать, пока B не вернет «выполнено», потому что у А в это время есть другая важная работа.
Причина, по которой я не могу просто сделать так, чтобы A ссылалась на B, заключается в том, что могут быть другие реализации, которые заменяют B, такие как C.