¿Cómo puedo capturar una variable miembro por valor cuando uso C++ 11 expresiones lambda?variable de miembro de captura por valor
El uso de la sintaxis [my_member]
no parece funcionar, y la captura implícita utiliza el puntero this
. Lo que se necesita es una forma de especificar explícitamente el tipo de captura de las variables miembro. ¿Es eso posible?
Mi solución por ahora es:
void member_function()
{
std::shared_ptr<my_member_class> my_member_copy = my_member; // this shouldn't be necessary
std::async([=]{ std::cout << *my_member_copy; });
// std::async([=]{ std::cout << *my_member_; }); // wrong, my member could be potentially out of scope
}
Necesito capturar por valor en el orden para que se incremente el conteo de ref compartido. De lo contrario, el objeto se destruirá cuando se destruya el objeto principal, lo que provocará una posible infracción de acceso en la operación asincrónica. (se olvidó de agregar * en la lambda). No veo cómo tu ejemplo difiere del mío. – ronag
"No sé de qué tipo es su miembro algo así debería funcionar:", la razón por la que escribí std :: shared_ptr en lugar de auto era ser explícito sobre el tipo de "mi_miembro", es decir shared_ptr. –
ronag