ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
13 июля
455628 Топик полностью
Скрипач, пророк (20.10.2013 15:29 - 16:22, просмотров: 67) ответил Скрипач на На примере видно, что заложенная в библиотеке виртуальность метода 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(); // ... }
... но не любой ценой.