我有以下情况并想知道是否有一个好的解决方案。声明相同类型的变量并重新使用它们
我使用Crypto++并声明如下:
if (_HashType == SHA1)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA1> pbkdf;
pbkdf.DeriveKey(...)
}
else if (_HashType == SHA256)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA256> pbkdf;
pbkdf.DeriveKey(...)
}
else if (_HashType == SHA384)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA384> pbkdf;
pbkdf.DeriveKey(...)
}
else if (_HashType == SHA512)
{
PKCS5_PBKDF2_HMAC<CryptoPP::SHA512> pbkdf;
pbkdf.DeriveKey(...)
}
我希望做的是这样的:
PKCS5_PBKDF2_HMAC<?> pbkdf;
if (_HashType == SHA1)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA1> pbkdf;
else if (_HashType == SHA256)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA256> pbkdf;
else if (_HashType == SHA384)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA384> pbkdf;
else if (_HashType == SHA512)
PKCS5_PBKDF2_HMAC<CryptoPP::SHA512> pbkdf;
pbkdf.DeriveKey(...)
有什么建议?
每个'pbkdf'都是*不同类型*。你不能这样做。 – crashmstr
确实PKCS5_PBKDF2_HMAC有一个共同的基类吗?是你的还是图书馆(你可以改变它吗?) – pm100
@Adviner - 另请参阅[责任链模式](https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern)和[策略模式](https://en.wikipedia.org/wiki/Strategy_pattern)。 (我认为他们是可能帮助你的模式)。 – jww