模板参数仅作为函数的返回值

这篇博客探讨了在程序中如何使用模板函数来避免重复的代码,以提高效率。作者通过展示如何从字节数据中提取不同类型的数值(如`unsigned int`,`unsigned short`和`byte`),指出当尝试使用模板函数简化此类操作时可能会遇到的问题。当直接调用`extractNumber`而没有指定模板类型时,编译器无法推断出正确的类型,导致编译错误。解决方案是显式地提供模板参数,如`extractNumber<unsigned short>(element)`。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

    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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值