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

    #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”。

09-10 22:13