我不能将定义的值传递给模板。即使是简单的计算也不起作用:
#define IR_TIMEOUT 564*173/2
return decodeSpace<IR_TIMEOUT>(
duration);
return decodeSpace<564*173/2>(
duration);工作:
return decodeSpace<48786>(
duration);定义:
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还是一个特性?或者更好:我如何避免/解决这样的事情?
我想要创建不同的不同解码功能,具有相同的结构,但不同的时间。传递值需要大量的闪存,所以我最好一遍又一遍地复制函数。所以我才想用模板。
发布于 2014-09-13 10:28:11
问题是564*173溢出uint16。
使用定义或直接表达式是相同的事情,当它涉及到常数折叠。
常量折叠是编译器“展开”你的表达式的事实。例如,将"2*3“改为"6”。
发布于 2014-09-13 13:08:31
问题是,我需要将计算本身声明为:
定义IR_TIMEOUT 564 173*173/2
Thx @ Matt McNabb
https://stackoverflow.com/questions/25821887
复制相似问题