Не нужно использовать их причудливые новомодные карты.
template <class Impl>
BaseImplementation* makeAlgo (const std::string& algo,
const byte* seed, size_t size)
{
return new Impl(algo, seed, size);
}
typedef BaseImplementation* makeAlgo_t (const std::string& algo,
const byte* seed, size_t size);
typedef struct { std::string name; makeAlgo_t func; } NamedAlgoMaker_t;
NamedAlgoMaker_t factory[] = {
{ "SHA-1", makeAlgo< HashImpl <...> > },
...
{ "HmacSHA1", makeAlgo< HmacImpl <...> > },
...
};
Если вы сохраняете массив отсортированным, вы можете использовать двоичный поиск, чтобы быстро найти алгоритм.
Конечно, из этих вещей вы также можете построить карту (или хэш / неупорядоченную карту), если хотите.