tengo este código:Visual Studio 2010 y std :: función
#include <iostream>
#include <functional>
struct A
{
int operator()(int i) const {
std::cout << "F: " << i << std::endl;
return i + 1;
}
};
int main()
{
A a;
std::tr1::function<int(int)> f = std::tr1::ref(a);
std::cout << f(6) << std::endl;
}
El objetivo es pasar el objeto por un funtor reference_wrapper, en una forma de evitar las llamadas copia costructor inútiles. espero que el siguiente resultado:
F: 6
7
Funciona correctamente con GCC> = 4.4.0, Visual Studio 2008 y con el impulso mediante la sustitución de espacio de nombres std :: TR1 con impulso. Solo no funciona con el nuevo Visual Studio 2010 tanto Express Beta 2 como Release Candidate.
¿Están estas nuevas características de C++ ocultas en vs2010? O hay algún error o mal uso en el código?
¿Cómo no funciona? – UncleBens
@litb: Creo que el OP tiene problemas con el uso de la clase de plantilla 'std :: tr1 :: ref' y * not * boost en VS2010. – dirkgently
Aquí es el resultado de generación de VS2010: http://pastebin.com/YQf4Qe8W –