我无法将定义的值传递给模板。即使是简单的计算也不起作用:
#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){}
错误:
E:\ Arduino \ sketchbook \ libraries \ IRLremote \ IRLprotocolNEC.cpp:在成员函数&#39;虚拟bool IRLprotocolNEC :: decodeIR(long unsigned int)&#39;: E:\ Arduino \ sketchbook \ libraries \ IRLremote \ IRLprotocolNEC.cpp:46:11:错误:没有匹配函数来调用&#39; IRLprotocolNEC :: decodeSpace(long unsigned int&amp;)&#39; 持续时间); ^ 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 CIRLprotocol :: decodeSpace(long unsigned int) bool decodeSpace(无符号长持续时间){ ^ E:\ Arduino \ sketchbook \ libraries \ IRLremote / CIRLremote.h:103:9:注意:模板参数扣除/替换失败: E:\ Arduino \ sketchbook \ libraries \ IRLremote \ IRLprotocolNEC.cpp:46:11:错误:常量表达式溢出[-fpermissive] 持续时间); ^ E:\ Arduino \ sketchbook \ libraries \ IRLremote \ IRLprotocolNEC.cpp:46:11:注意:在模板参数中输入&#39; unsigned int&#39;
这是一个错误还是一个功能?或者更好:我如何避免/解决这样的事情?
我想创建具有相同结构但不同时序的不同不同解码功能。传递值需要大量闪光,所以我最好一遍又一遍地复制这个功能。 Thatswhy我想使用模板。
答案 0 :(得分:1)
问题是564 * 173溢出uint16。
对于常量折叠,使用define或直接表达式是一回事。
常量折叠是编译器“扩展”表达式的事实。例如,将“2 * 3”替换为“6”。
答案 1 :(得分:0)
问题是我需要将计算本身声明为:
Thx @ Matt McNabb