jww*_*jww 1 c++ factory functor
我有一个大工厂,我正在试图弄清楚如何让它看起来很漂亮.
大约有40种可能的对象/构造函数组合:
if(algorithm == "SHA-1")
return new HashImpl<...>(algorithm, seed, size);
if(algorithm == "SHA-224")
return new HashImpl<...>(algorithm, seed, size);
if(algorithm == "SHA-256")
return new HashImpl<...>(algorithm, seed, size);
...
if(algorithm == "AES" || algorithm == "AES128")
return new BlockCipherImpl<...>(algorithm, seed, size);
...
if(algorithm == "HmacSHA1")
return new HmacImpl<...>(algorithm, seed, size);
...
Run Code Online (Sandbox Code Playgroud)
有没有办法将其放入地图中,这样我至少可以取消顺序搜索?我在弄清楚如何使构造函数成为一个仿函数时遇到了问题.
编辑:代码可以在这里找到:
http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/src/crypto/SecureRandomImpl.cpp,从第130行开始.
不需要使用它们花哨的新奇地图.
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 <...> > },
...
};
Run Code Online (Sandbox Code Playgroud)
如果对数组进行排序,则可以使用二进制搜索快速查找算法.
当然,如果你愿意,也可以用这些东西构建一个地图(或散列/无序地图).