程序中写过这样几个函数:
unsigned int extractUInt(byte *element)
{
byte id = 0;
byte *decodedUInt = NULL;
unsigned short decodedUIntLength = ElementHandler::decode(element, &id, &decodedUInt);
unsigned int ui = 0;
memcpy_s(&ui, sizeof(ui), decodedUInt, decodedUIntLength);
delete []decodedUInt;
return ui;
}
unsigned short extractUShort(byte *element)
{
byte id = 0;
byte *decodedUShort = NULL;
unsigned short decodedUShortLength = ElementHandler::decode(element, &id, &decodedUShort);
unsigned short us = 0;
memcpy_s(&us, sizeof(us), decodedUShort, decodedUShortLength);
delete []decodedUShort;
return us;
}
byte extractByte(byte *element)
{
byte id = 0;
byte *decodedByte = NULL;
unsigned short decodedByteLength = ElementHandler::decode(element, &id, &decodedByte);
byte by = 0;
//memcpy_s(&by, sizeof(by), decodedByte, decodedByteLength);
by = *decodedByte;
delete []decodedByte;
return by;
}
写的时候并未觉得异样,昨天再次查看的时候才发现三个函数语义重复,仅返回值不同,于是想到模板函数。想当然地写成了这样:
template<class T>
T extractNumber(byte *element)
{
……
}
编译时并未报错,但是假如调用函数时:
unsigned short us = extractNumber(element);
会出现编译错误,提示无法为“T”推导 模板 参数。改成如下模样即可解决问题:
unsigned short us = extractNumber<unsigned short>(element);