【发布时间】:2014-09-13 09:41:07
【问题描述】:
我无法将定义的值传递给模板。即使是简单的计算也不起作用:
#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:在成员函数'virtual bool IRLprotocolNEC::decodeIR(long unsigned int)'中: E:\Arduino\sketchbook\libraries\IRLremote\IRLprotocolNEC.cpp:46:11: 错误: 没有匹配函数调用'IRLprotocolNEC::decodeSpace(long unsigned 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 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:注意:在模板参数中,类型为 'unsigned int'
这是错误还是功能?或者更好:我怎样才能避免/解决这样的事情?
我想创建具有相同结构但不同时序的不同解码函数。传递值需要很多时间,所以我最好一遍又一遍地复制函数。这就是我想使用模板的原因。
【问题讨论】:
-
@Ever 这些是非类型模板参数。阅读。
-
以什么方式失败?
-
不要说“不起作用”,而是说出实际发生的事情以及您期望发生的事情。如果它可能是编译器错误,则包括您的编译器名称和版本
-
无法在 clang 3.4.1、g++ 4.9.0 或 MSVC 2013 上重现。您使用的编译器/版本是什么?
-
错误信息好像是说
uint16_t是unsigned int,你能确认你的平台有16位整数吗? (如果这是真的,那么写564 * 173会由于有符号的 int 溢出而导致未定义的行为)
标签: c++