#include <functional>
#include <iostream>
#include <vector>
#include <algorithm>
auto addition = [] (double a, double b) { return a + b; };
auto substruction = [] (double a, double b) { return a - b; };
auto divide = [] (double a, double b) { return a / b; };
auto multiplie = [] (double a, double b) { return a * b; };
typedef std::function<double (double, double)> DoubleFunc;
int main()
{
std::vector<DoubleFunc> funcVector;
funcVector.push_back(addition);
funcVector.push_back(substruction);
funcVector.push_back(multiplie);
funcVector.push_back(divide);
std::for_each(funcVector.begin(), funcVector.end(), []
(DoubleFunc func)
{
std::cout << func(3.14159, 100500) << std::endl;
});
system("pause");
return 0;
}
I2luY2x1ZGUgPGZ1bmN0aW9uYWw+CiNpbmNsdWRlIDxpb3N0cmVhbT4KI2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPGFsZ29yaXRobT4KCmF1dG8gYWRkaXRpb24gPSBbXSAoZG91YmxlIGEsIGRvdWJsZSBiKSB7IHJldHVybiBhICsgYjsgfTsKCmF1dG8gc3Vic3RydWN0aW9uID0gW10gKGRvdWJsZSBhLCBkb3VibGUgYikgeyByZXR1cm4gYSAtIGI7IH07CgphdXRvIGRpdmlkZSA9IFtdIChkb3VibGUgYSwgZG91YmxlIGIpIHsgcmV0dXJuIGEgLyBiOyB9OwoKYXV0byBtdWx0aXBsaWUgPSBbXSAoZG91YmxlIGEsIGRvdWJsZSBiKSB7IHJldHVybiBhICogYjsgfTsKCnR5cGVkZWYgc3RkOjpmdW5jdGlvbjxkb3VibGUgKGRvdWJsZSwgZG91YmxlKT4gRG91YmxlRnVuYzsKCmludCBtYWluKCkKewogICAgc3RkOjp2ZWN0b3I8RG91YmxlRnVuYz4gZnVuY1ZlY3RvcjsKCiAgICBmdW5jVmVjdG9yLnB1c2hfYmFjayhhZGRpdGlvbik7CiAgICBmdW5jVmVjdG9yLnB1c2hfYmFjayhzdWJzdHJ1Y3Rpb24pOwogICAgZnVuY1ZlY3Rvci5wdXNoX2JhY2sobXVsdGlwbGllKTsKICAgIGZ1bmNWZWN0b3IucHVzaF9iYWNrKGRpdmlkZSk7CgogICAgc3RkOjpmb3JfZWFjaChmdW5jVmVjdG9yLmJlZ2luKCksIGZ1bmNWZWN0b3IuZW5kKCksIFtdCiAgICAoRG91YmxlRnVuYyBmdW5jKQogICAgewogICAgICAgIHN0ZDo6Y291dCA8PCBmdW5jKDMuMTQxNTksIDEwMDUwMCkgPDwgc3RkOjplbmRsOwogICAgfSk7CgogICAgc3lzdGVtKCJwYXVzZSIpOwogICAgcmV0dXJuIDA7Cn0=