Скрипачпророк (20.10.2013 15:29 - 16:22, просмотров: 78) ответил Скрипач на На примере видно, что заложенная в библиотеке виртуальность метода run не выстреливает.
Полумера (без расширений GNU) **
#define PT_NEW(base_ptr, tmp, type) \
_ptLine = __LINE__; case __LINE__: \
for(type* tmp = new(nothrow) type, base_ptr = 0; \
base_ptr == 0; \
base_ptr = tmp, tmp = 0)
Complex_Proc::run(){
PT_NEW(rn, c, Rarely_needed_Proc){
if(!c) return true;
c->a = "a";
c->try_count = 3;
};
PT_WAIT_THREAD(*rn);
rc = rn->rc; // Перед освобождением памяти скопировали результат
delete rn;
}
#define PT_PARS(base_ptr, tmp, type) \
PT_WAIT_UNTIL(base_ptr); \
for(type* tmp = static_cast<type*>(base_ptr); \
tmp != 0; tmp = 0)
Complex_Proc::run(){
// ...
PT_PARS(rn, c, Rarely_needed_Proc){
c->a = "a";
c->try_count = 3;
};
rn->run();
// ...
}
... но не любой ценой.