Всех приветствую, прошу совета в выборе оптимальной структуры данных для хранения, выбора и вызова определённых callback-функций (в соответсвии с поступающими аргументами).
В частности, в программу подаются строки, которые сопоставляются с регулярными выражениями, в случае совпадения строки с регулярным выражением вызывается функция. В линейном случае (одного аргумента - паттерна boost::regex) напрашивается структура типа key-value, например так:
typedef std::map<boost::regex, boost::function<void(void)> > regex_callback;
void SuOpenedCallback()
{
}
void SuClosedCallback()
{
}
int main(int argc, char** argv)
{
//Регулярные выражения для сопоставления
boost::regex su_opened ("some_regexp_1");
boost::regex su_closed ("some_regexp_2");
//Структура данных, хранящая коллбеки
regex_callback resolver = boost::assign::map_list_of
(su_opened, boost::bind(&SuOpenedCallback))
(su_closed, boost::bind(&SuClosedCallback));
std::string line("some_part_of_/var/log/secure");
boost::smatch result;
BOOST_FOREACH(const auto& pair, resolver)
{
if(boost::regex_match(line, result, pair.first)
{
pair.second();
break;
}
}
}
Мой вопрос относительно случая, когда аргументов будет много (не только один boost::regex):
- Существует ли в С++ типовое решение для структуры типа multiple_keys-value и как там осуществляется перебор ключей? Или же надо писать свой класс, состоящий из нескольких аргументов, и подставлять его в key?
- Есть ли вообще какие-то шаблоны для такой «многофакторной» матрицы решений?
Благодарю.