Проще объяснить сразу на примере того, что хочется добиться:
template <class Callback> void Manager::addHandler(const std::string& pattern, Callback handler)
{
//...???
}
void Manager::process(const std::string& request)
{
//...как???
}
//...
//...
manager.addHandler("dir/{0}", [](const std::string& dir) {
//do smth
}); //1
manager.addHandler("root/{0}/{1}", [](const std::string& dir, const std::string& subdir) {
//do smth other
}); //2
manager.process("root/kokoko/pokpok"); //должна вызваться лямбда, которую мы передали в //2 с аргументами "kokoko" и "pokpok"
Мы где то сохраняем паттерн, с которым сопоставляем строки (пути, запросы, команды, etc) и в соответствии с тем, с чем совпадет, вызовем сохраненную функцию обработчик с параметрами, выдранными из команды, с нужным количеством их. Есть какие идеи насчет реализации Manager::addHandler и Manager::process? Строка, передаваемая в process, может и будет генерироваться в рантайме