#include <vector>
#include <map>
#include <iostream>
#include <string>
using namespace std;
struct callable {
virtual void operator()(vector<string> args) = 0;
}
std::map<std::string, callable> commands =
{
{ "cd", struct : callable
{
operator()(vector<string> args) {
out << "cd called with args" << endl;
for (auto i = args.begin(); args.end() != i; ++i) out << *i << endl;
}
}
}
}
int main() {
vector<string> args = {"hello", "world"};
commands["cd"](args);
return 0;
}
I2luY2x1ZGUgPHZlY3Rvcj4KI2luY2x1ZGUgPG1hcD4KI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8c3RyaW5nPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IGNhbGxhYmxlIHsKICB2aXJ0dWFsIHZvaWQgb3BlcmF0b3IoKSh2ZWN0b3I8c3RyaW5nPiBhcmdzKSA9IDA7Cn0KCnN0ZDo6bWFwPHN0ZDo6c3RyaW5nLCBjYWxsYWJsZT4gY29tbWFuZHMgPQp7CiAgeyAiY2QiLCBzdHJ1Y3QgOiBjYWxsYWJsZQogICAgewogICAgICBvcGVyYXRvcigpKHZlY3RvcjxzdHJpbmc+IGFyZ3MpIHsKICAgICAgICBvdXQgPDwgImNkIGNhbGxlZCB3aXRoIGFyZ3MiIDw8IGVuZGw7CiAgICAgICAgZm9yIChhdXRvIGkgPSBhcmdzLmJlZ2luKCk7IGFyZ3MuZW5kKCkgIT0gaTsgKytpKSBvdXQgPDwgKmkgPDwgZW5kbDsKICAgICAgfQogICAgfQogIH0KfQoKaW50IG1haW4oKSB7CiAgdmVjdG9yPHN0cmluZz4gYXJncyA9IHsiaGVsbG8iLCAid29ybGQifTsKICBjb21tYW5kc1siY2QiXShhcmdzKTsKICByZXR1cm4gMDsKfQ==