我有以下情況並想知道是否有一個好的解決方案。聲明相同類型的變量並重新使用它們
我使用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