Здравствуйте, niXman, Вы писали:
X>тут type::register() зовется единожды при запуске программы, но а type::invoke() множество раз.
Используй std::vector<std::string>, отсортируй после всех register, но перед первым invoke, ищи через свободную функцию std::lower_bound, передавая свой компазатор:
struct Comparator
{
bool operator()(cosnt std::string& s1, const char* s2) const { return std::strcmp(s1.c_str(), s2) < 0; }
bool operator()(const char* s1, const std::string& s2) const { return std::strcmp(s1, s2.c_str()) < 0; }
};