首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在模板中使用#define值

在模板中使用#define值
EN

Stack Overflow用户
提问于 2014-09-13 09:41:07
回答 2查看 208关注 0票数 2

我不能将定义的值传递给模板。即使是简单的计算也不起作用:

代码语言:javascript
复制
    #define IR_TIMEOUT 564*173/2
    return decodeSpace<IR_TIMEOUT>(
    duration);

    return decodeSpace<564*173/2>(
    duration);

工作:

代码语言:javascript
复制
    return decodeSpace<48786>(
    duration);

定义:

代码语言:javascript
复制
    template <uint16_t irTimeout>
    bool decodeSpace(unsigned long duration){}

错误:

成员函数“虚拟bool::decodeIR(长无符号int)”中的E:\Arduino\sketchbook\libraries\IRLremote\IRLprotocolNEC.cpp::E:\Arduino\sketchbook\libraries\IRLremote\IRLprotocolNEC.cpp:46:11:错误:对“IRLprotocolNEC::解码空间(长无符号int&)”的调用没有匹配函数;^ E:\Arduino\sketchbook\libraries\IRLremote\IRLprotocolNEC.cpp:46:11:注意:候选人是:包含在E:\Arduino\sketchbook\libraries\IRLremote/IRLprotocolNEC.h:27:0,中的文件来自E:\Arduino\sketchbook\libraries\IRLremote\IRLprotocolNEC.cpp:24: E:\Arduino\sketchbook\libraries\IRLremote/CIRLremote.h:103:9:注意事项:模板bool bool协议::decodeSpace(长无符号int) bool decodeSpace(无符号长时间){^ E:\Arduino\sketchbook\libraries\IRLremote/CIRLremote.h:103:9:注:模板参数演绎/替换失败:e:\Arduino\草图\库\IRLremote\IRLprotocolNEC.cpp:46:11:错误:常量表达式-fpermissive持续时间溢出);^ E:\Arduino\sketchbook\libraries\IRLremote\IRLprotocolNEC.cpp:46:11:注:在模板参数中,类型为'unsigned int‘

这是一个bug还是一个特性?或者更好:我如何避免/解决这样的事情?

我想要创建不同的不同解码功能,具有相同的结构,但不同的时间。传递值需要大量的闪存,所以我最好一遍又一遍地复制函数。所以我才想用模板。

EN

回答 2

Stack Overflow用户

发布于 2014-09-13 10:28:11

问题是564*173溢出uint16。

使用定义或直接表达式是相同的事情,当它涉及到常数折叠。

常量折叠是编译器“展开”你的表达式的事实。例如,将"2*3“改为"6”。

票数 1
EN

Stack Overflow用户

发布于 2014-09-13 13:08:31

问题是,我需要将计算本身声明为:

定义IR_TIMEOUT 564 173*173/2

Thx @ Matt McNabb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25821887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档