我试图根据另一个变量值设置变量种类,但是我不知道该怎么做。我已经尝试过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/

10-10 14:02