程序中写过这样几个函数:

extractUInt
1
unsigned int extractUInt(byte *element)
2

{
3
byte id = 0;
4
byte *decodedUInt = NULL;
5
unsigned short decodedUIntLength = ElementHandler::decode(element, &id, &decodedUInt);
6
unsigned int ui = 0;
7
memcpy_s(&ui, sizeof(ui), decodedUInt, decodedUIntLength);
8
9
delete []decodedUInt;
10
return ui;
11
}
extractUShort
1
unsigned short extractUShort(byte *element)
2

{
3
byte id = 0;
4
byte *decodedUShort = NULL;
5
unsigned short decodedUShortLength = ElementHandler::decode(element, &id, &decodedUShort);
6
unsigned short us = 0;
7
memcpy_s(&us, sizeof(us), decodedUShort, decodedUShortLength);
8
9
delete []decodedUShort;
10
return us;
11
}
extractByte
1
byte extractByte(byte *element)
2

{
3
byte id = 0;
4
byte *decodedByte = NULL;
5
unsigned short decodedByteLength = ElementHandler::decode(element, &id, &decodedByte);
6
byte by = 0;
7
//memcpy_s(&by, sizeof(by), decodedByte, decodedByteLength);
8
by = *decodedByte;
9
10
delete []decodedByte;
11
return by;
12
}写的时候并未觉得异样,昨天再次查看的时候才发现三个函数语义重复,仅返回值不同,于是想到模板函数。想当然地写成了这样:

Code
1
template<class T>
2
T extractNumber(byte *element)
3

{
4
byte id = 0;
5
byte *decoded = NULL;
6
unsigned short decodedLength = ElementHandler::decode(element, &id, &decoded);
7
8
T t = 0;
9
memcpy_s(&t, sizeof(t), decoded, decodedLength);
10
11
delete []decoded;
12
return t;
13
}编译时未报错,但在调用时
1
unsigned short us = extractNumber(element); 会出现编译错误,提示无法为“T”推导模板参数。改成如下模样即可解决问题:
1
unsigned short us = extractNumber<unsigned short>(element);