C++

deque + shared_ptr + for_each + mem_fun = cabumm

Recentemente tive problemas com mem_fun e shared_ptr em um loop for_each

Os elementos

C++
typedef shared_ptr<task> task_ptr;
typedef deque<task_ptr , pool_allocator<task_ptr> > deque_task_ptr;

Agora a combinação explosiva

C++
for_each(_task_pool.begin(), _task_pool.end(),
    std::mem_fun(&task::do_task));

O problema está em usar std::mem_fun, ela não suporta chamar métodos de uma classe que estão em um shared_ptr, eu poderia ter usado bind, mais preferi manter o código, como a boost tem sua própria implementação de mem_fn ficando assim:

C++
for_each(_task_pool.begin(), _task_pool.end(),
    boost::mem_fn(&task::do_task));

Resolvido, obrigado Alex por reportar o problema.

Fonte arquivística

Conteúdo recuperado via Wayback Machine, captura 20080705192754.

Abrir registro original ↗

Discussão preservada

4 comentários

A página histórica registra 4 comentários, mas o conteúdo deles não foi recuperado.