利用C++中union的特性,可以將2個(gè)參數(shù)生成對(duì)應(yīng)類型的唯一key。
如下代碼所示,用2個(gè)short類型的參數(shù)生成一個(gè)int類型的key掏击,當(dāng)param1和param2有一個(gè)不同可以生成唯一的key。
應(yīng)用場(chǎng)景:當(dāng)讀取的配置有一個(gè)index和一個(gè)sub_index,當(dāng)index相同時(shí)sub_index遞增秩铆,此時(shí)我們將index和sub_index組合就可以生成一個(gè)唯一key砚亭,用作存儲(chǔ)配置map的key。
當(dāng)獲取配置的時(shí)侯殴玛,我們可以根據(jù)index和sub_index生成key從map中找到對(duì)應(yīng)配置捅膘。
image.png
int ConvertParamToInt(short param1, short param2)
{
union
{
int i_value;
struct
{
short s_value1;
short s_value2;
};
} union_param;
union_param.s_value1 = param1;
union_param.s_value2 = param2;
return union_param.i_value;
}
void ParamIntToValue(const int key, int& param1, int& param2)
{
union
{
int i_value;
struct
{
short s_value1;
short s_value2;
};
} union_param;
union_param.i_value = key;
param1 = union_param.s_value1;
param2 = union_param.s_value2;
}
long long ConvertParamToLongLong(int param1, int param2)
{
union
{
long long ll_value;
struct
{
int i_value1;
int i_value2;
};
} union_param;
union_param.i_value1 = param1;
union_param.i_value2 = param2;
return union_param.ll_value;
}
void ParamLongLongToValue(const long long key, int ¶m1, int ¶m2)
{
union
{
long long ll_value;
struct
{
int i_value1;
int i_value2;
};
} union_param;
union_param.ll_value = key;
param1 = union_param.i_value1;
param2 = union_param.i_value2;
}
long long ConvertParamToLongLong(int param1, short param2, short param3)
{
union
{
long long ll_value;
struct
{
int i_value1;
short s_value2;
short s_value3;
};
} union_param;
union_param.i_value1 = param1;
union_param.s_value2 = param2;
union_param.s_value3 = param3;
return union_param.ll_value;
}
void ParamLongLongToValue(const long long key, int& param1, short& param2,short ¶m3)
{
union
{
long long ll_value;
struct
{
int i_value1;
short s_value2;
short s_value3;
};
} union_param;
union_param.ll_value = key;
param1 = union_param.i_value1;
param2 = union_param.s_value2;
param3 = union_param.s_value2;
}