我试图根据另一个变量值设置变量种类,但是我不知道该怎么做。我已经尝试过if和switch,但是两者都创建了一个局部变量而没有改变另一个(即它应该如何工作)。
我有以下代码:
crypto::sha1_t HashKey;
if (CheckCRC == 1){
crypto::md2_t HashKey;
}
else if (CheckCRC == 2){
crypto::md4_t HashKey;
}
else if (CheckCRC == 3){
crypto::md5_t HashKey;
}
和这个:
crypto::sha1_t HashKey;
switch (CheckCRC){
case 1: {
crypto::md2_t HashKey;
HashKey.begin();
}
break;
case 2: {
crypto::md4_t HashKey;
HashKey.begin();
}
break;
case 3: {
crypto::md5_t HashKey;
HashKey.begin();
}
break;
}
md2_t,md4_t,md5_t和sha1_t是类。
最后,HashKey始终是crypto :: sha1_t。有什么方法可以根据CheckCRC值更改种类吗?
谢谢!!
编辑:
我认为基类是cryptohash_t,其他是定义:
typedef cryptohash_t<CALG_MD2> md2_t;
typedef cryptohash_t<CALG_MD4> md4_t;
typedef cryptohash_t<CALG_MD5> md5_t;
typedef cryptohash_t<CALG_SHA1> sha1_t;
最佳答案
解决此问题的方法是具有相同基类并使用new
的不同类型。
如果我们假设您的crypto::sha1_t
是基类,则使用crypto::sha1_t* HashKey;
并:
if (CheckCRC == 1){
HashKey = new crypto::md2_t;
}
else if (CheckCRC == 2){
HashKey = new crypto::md4_t;
}
else if (CheckCRC == 3){
HashKey = crypto::md5_t;
}
现在,您通常需要使用
HashKey->
而不是HashKey.
,并且在完成所有操作后,请使用delete HashKey
以避免内存泄漏。关于c++ - 用“if”或“switch”设置变量种类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23853942/