#include <iostream>
#include <string>
#include <functional>
class Foo
{
public:
Foo() {
arry[0] = "foo";
arry[1] = "bar";
arry[2] = "baz";
arry[3] = "qux";
}
// template <typename T>
// void each(T func)
// void each(const std::function<std::string (std::string ele)> &func)
void each(std::string (* func)(std::string ele))
{
for(int i = 0; i < size; i++) {
func(arry[i]);
}
}
int size = 4;
std::string arry[4];
};
int main(void)
{
Foo foo;
foo.each(
[](std::string str) -> std::string {
std::cout << str << std::endl;
return str;
}
);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCmNsYXNzIEZvbwp7CnB1YmxpYzoKICAgIEZvbygpIHsKICAgICAgICBhcnJ5WzBdID0gImZvbyI7CiAgICAgICAgYXJyeVsxXSA9ICJiYXIiOwogICAgICAgIGFycnlbMl0gPSAiYmF6IjsKICAgICAgICBhcnJ5WzNdID0gInF1eCI7CiAgICB9CgogICAgLy8gdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAvLyB2b2lkIGVhY2goVCBmdW5jKQogICAgLy8gdm9pZCBlYWNoKGNvbnN0IHN0ZDo6ZnVuY3Rpb248c3RkOjpzdHJpbmcgKHN0ZDo6c3RyaW5nIGVsZSk+ICZmdW5jKQogICAgdm9pZCBlYWNoKHN0ZDo6c3RyaW5nICgqIGZ1bmMpKHN0ZDo6c3RyaW5nIGVsZSkpCiAgICB7CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykgewogICAgICAgICAgICBmdW5jKGFycnlbaV0pOwogICAgICAgIH0KICAgIH0KCiAgICBpbnQgc2l6ZSA9IDQ7CiAgICBzdGQ6OnN0cmluZyBhcnJ5WzRdOwp9OwoKaW50IG1haW4odm9pZCkKewogICAgRm9vIGZvbzsKCiAgICBmb28uZWFjaCgKICAgICAgICBbXShzdGQ6OnN0cmluZyBzdHIpIC0+IHN0ZDo6c3RyaW5nIHsKICAgICAgICAgICAgc3RkOjpjb3V0IDw8IHN0ciA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgIHJldHVybiBzdHI7CiAgICAgICAgfQogICAgKTsKCiAgICByZXR1cm4gMDsKfQ==