我无法将定义的值传递给模板。即使是简单的计算也不起作用:
#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){}
错误:
这是错误还是功能?或者更好:我如何避免/解决类似问题?
我想用相同的结构,不同的时序创建不同的不同解码功能。传递值需要花费大量时间,因此我最好一遍又一遍地复制该函数。那就是为什么我想使用模板。
最佳答案
问题是564 * 173溢出uint16。
进行固定折叠时,使用定义或直接表达式是一回事。
常量折叠是编译器“扩展”表达式的事实。例如,将“2 * 3”替换为“6”。