gpt4 book ai didi

C++ 和 STL : Constructor Factory

转载 作者:行者123 更新时间:2023-11-30 00:57:57 26 4
gpt4 key购买 nike

我有一个大工厂,我想弄清楚如何让它看起来很漂亮。
大约有 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);
...

有没有办法将其放入 map 中,这样我至少可以取消顺序搜索?我在弄清楚如何使构造函数成为仿函数时遇到问题。

编辑:代码可以在这里找到:
http://code.google.com/p/owasp-esapi-cplusplus/source/browse/trunk/src/crypto/SecureRandomImpl.cpp ,从第 130 行开始。

最佳答案

无需使用它们花哨的新奇 map 。

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 <...> > },
...
};

如果保持数组排序,则可以使用二分查找算法快速找到算法。

当然,如果你愿意,你也可以用这些东西构建一个映射(或散列/无序映射)。

关于C++ 和 STL : Constructor Factory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7170915/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com