#include <functional>
#include <iostream>
#include <vector>
template <typename LambdaT, typename R, typename... Args>
auto _LambdaToStdFunction(LambdaT lambda, R (LambdaT::*)(Args...) const) {
return std::function<R(Args...)>(lambda);
}
template <typename LambdaT>
auto LambdaToStdFunction(LambdaT &&lambda) {
return _LambdaToStdFunction(std::forward<LambdaT>(lambda),
&LambdaT::operator());
}
template <typename A,typename B>
std::vector<B> map(std::function<B (A)> f, std::vector<A> arr) {
std::vector<B> res;
for (int i=0;i<arr.size();i++) res.push_back(f(arr[i]));
return res;
}
int main() {
std::vector<int> a = {1, 2, 3};
auto f = LambdaToStdFunction([](int x) -> int {
std::cout << x << std::endl;
return x;
});
map(LambdaToStdFunction([](int x) -> int {
std::cout << x << std::endl;
return x;}),a); //now OK
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KCnRlbXBsYXRlIDx0eXBlbmFtZSBMYW1iZGFULCB0eXBlbmFtZSBSLCB0eXBlbmFtZS4uLiBBcmdzPgphdXRvIF9MYW1iZGFUb1N0ZEZ1bmN0aW9uKExhbWJkYVQgbGFtYmRhLCBSIChMYW1iZGFUOjoqKShBcmdzLi4uKSBjb25zdCkgewogIHJldHVybiBzdGQ6OmZ1bmN0aW9uPFIoQXJncy4uLik+KGxhbWJkYSk7Cn0KdGVtcGxhdGUgPHR5cGVuYW1lIExhbWJkYVQ+CmF1dG8gTGFtYmRhVG9TdGRGdW5jdGlvbihMYW1iZGFUICYmbGFtYmRhKSB7CiAgcmV0dXJuIF9MYW1iZGFUb1N0ZEZ1bmN0aW9uKHN0ZDo6Zm9yd2FyZDxMYW1iZGFUPihsYW1iZGEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTGFtYmRhVDo6b3BlcmF0b3IoKSk7Cn0KCnRlbXBsYXRlIDx0eXBlbmFtZSBBLHR5cGVuYW1lIEI+IApzdGQ6OnZlY3RvcjxCPiBtYXAoc3RkOjpmdW5jdGlvbjxCIChBKT4gZiwgc3RkOjp2ZWN0b3I8QT4gYXJyKSB7CiAgc3RkOjp2ZWN0b3I8Qj4gcmVzOwogICAgICAgZm9yIChpbnQgaT0wO2k8YXJyLnNpemUoKTtpKyspIHJlcy5wdXNoX2JhY2soZihhcnJbaV0pKTsKICAgICAgIHJldHVybiByZXM7Cn0KCgppbnQgbWFpbigpIHsKICBzdGQ6OnZlY3RvcjxpbnQ+IGEgPSB7MSwgMiwgM307CiAgYXV0byBmID0gTGFtYmRhVG9TdGRGdW5jdGlvbihbXShpbnQgeCkgLT4gaW50IHsKICAgIHN0ZDo6Y291dCA8PCB4IDw8IHN0ZDo6ZW5kbDsKICAgIHJldHVybiB4OwogIH0pOwogIG1hcChMYW1iZGFUb1N0ZEZ1bmN0aW9uKFtdKGludCB4KSAtPiBpbnQgewoJc3RkOjpjb3V0IDw8IHggPDwgc3RkOjplbmRsOwoJcmV0dXJuIHg7fSksYSk7IC8vbm93IE9LCiAgcmV0dXJuIDA7Cn0=