#include <iostream>
#include <functional>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
using namespace std::placeholders;
class CPrueba
{
public:
CPrueba(int x, int y):m_X(x), m_Y(y){ }
int X()const {return m_X;}
int Y()const {return m_Y;}
private:
int m_X;
int m_Y;
};
class ITest
{
public:
virtual CPrueba Prueba(double p, double d = 0)const = 0;
};
class CTest : public ITest
{
public:
CTest(){}
CPrueba Prueba(double p, double d = 0)const{ return CPrueba(p, d); }
};
void foo( const ITest& test)
{
std::vector<double> v;
v.push_back(10.0);
v.push_back(20.0);
v.push_back(30.0);
v.push_back(40.0);
std::vector<CPrueba> vRes;
std::transform(v.begin(), v.end(), back_inserter(vRes), bind(&ITest::Prueba, ref(test), _1, 0));
for(std::vector<CPrueba>::const_iterator it = vRes.begin(); it != vRes.end(); ++it)
{
cout << it->X() << "," << it->Y()<<endl;
}
}
int main() {
CTest test;
foo(test);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KI2luY2x1ZGUgPGl0ZXJhdG9yPgoKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKdXNpbmcgbmFtZXNwYWNlIHN0ZDo6cGxhY2Vob2xkZXJzOwoKY2xhc3MgQ1BydWViYQp7CnB1YmxpYzoKICAgIENQcnVlYmEoaW50IHgsIGludCB5KTptX1goeCksIG1fWSh5KXsgfQogICAgaW50IFgoKWNvbnN0IHtyZXR1cm4gbV9YO30KICAgIGludCBZKCljb25zdCB7cmV0dXJuIG1fWTt9CnByaXZhdGU6CiAgICBpbnQgbV9YOwogICAgaW50IG1fWTsKfTsKCmNsYXNzIElUZXN0CnsKcHVibGljOgogICAgdmlydHVhbCBDUHJ1ZWJhIFBydWViYShkb3VibGUgcCwgZG91YmxlIGQgPSAwKWNvbnN0ID0gMDsKfTsKCmNsYXNzIENUZXN0IDogcHVibGljIElUZXN0CnsKcHVibGljOgogICAgQ1Rlc3QoKXt9CgogICAgQ1BydWViYSBQcnVlYmEoZG91YmxlIHAsIGRvdWJsZSBkID0gMCljb25zdHsgcmV0dXJuIENQcnVlYmEocCwgZCk7IH0KfTsKCnZvaWQgZm9vKCBjb25zdCBJVGVzdCYgdGVzdCkKewogICAgc3RkOjp2ZWN0b3I8ZG91YmxlPiB2OwogICAgdi5wdXNoX2JhY2soMTAuMCk7CiAgICB2LnB1c2hfYmFjaygyMC4wKTsKICAgIHYucHVzaF9iYWNrKDMwLjApOwogICAgdi5wdXNoX2JhY2soNDAuMCk7CgogICAgc3RkOjp2ZWN0b3I8Q1BydWViYT4gdlJlczsKCiAgICBzdGQ6OnRyYW5zZm9ybSh2LmJlZ2luKCksIHYuZW5kKCksIGJhY2tfaW5zZXJ0ZXIodlJlcyksIGJpbmQoJklUZXN0OjpQcnVlYmEsIHJlZih0ZXN0KSwgXzEsIDApKTsKCiAgICBmb3Ioc3RkOjp2ZWN0b3I8Q1BydWViYT46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gdlJlcy5iZWdpbigpOyBpdCAhPSB2UmVzLmVuZCgpOyArK2l0KQogICAgewogICAgICAgIGNvdXQgPDwgaXQtPlgoKSA8PCAiLCIgPDwgaXQtPlkoKTw8ZW5kbDsKICAgIH0KfQoKaW50IG1haW4oKSB7CiAgICBDVGVzdCB0ZXN0OwoKICAgIGZvbyh0ZXN0KTsKICAgIHJldHVybiAwOwp9