Por alguna razón, no puedo usar boost::format
en un boost::lambda
. Aquí está una (esperemos) la simplificación compilables de mi código:Uso de boost :: formato en un impulso :: lambda
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <boost/assign/list_of.hpp>
#include <boost/format.hpp>
#include <boost/lambda/lambda.hpp>
namespace bl = boost::lambda;
int main()
{
const std::vector<int> v = boost::assign::list_of(1)(2)(3);
std::for_each(v.begin(), v.end(), bl::var(std::cout) << std::setw(10) << bl::_1);
std::for_each(v.begin(), v.end(), bl::var(std::cout) << boost::format("%10d") % bl::_1);
}
- La primera
std::for_each
produce la salida esperada - El segundo
std::for_each
única salida a espacios en blanco sin ningún número
¿Por qué? Realmente no estoy familiarizado con boost::lambda
así que me podría estar perdiendo lo obvio aquí.
Por favor, no sugieren std::copy
respuestas basadas: mi código real no funciona en std::vector
sino en boost::fusion::vector
(y std::for_each
es en realidad un boost::fusion::for_each
).
sí, esto funciona, pero no tengo idea de por qué es necesario. 'boost :: lambda :: var' solo debería ser necesario cuando ninguno de los argumentos es una expresión lambda. Apuntaba a una sintaxis agradable y concisa utilizando 'boost :: lambda' :(Lástima – icecrime