为何fail_test1模板报“未知标识符”错误而pass_test1无此问题?
DMLC模板中
fail_test1报"unknown identifier"错误的原因分析 核心差异在于DMLC对模板内代码的解析时机:
- 对于
fail_test1的顶层代码saved int8 data[len];:DMLC在预处理模板结构阶段就会尝试解析数组长度表达式len,但此时模板的param len还未完成实例化绑定,系统无法识别这个标识符,因此报错。 - 对于
pass_test1里#if (true)块内的数组定义:预处理块(#if/#else等)中的代码会被延迟到模板参数完全实例化之后才解析,此时len已经被正确赋值为10,所以能正常识别并编译。
如果要修复fail_test1,除了用#if块包裹数组定义,也可以利用DMLC支持的延迟解析语法,确保数组长度的计算在参数绑定完成后执行。
你的测试代码:
template pass_test1 { param len = 10; #if (true) { saved int8 data[len]; } } group pass is pass_test1; template fail_test1 { param len = 10; saved int8 data[len]; } group fail is fail_test1;
内容的提问来源于stack exchange,提问作者Anthony Moore
相关产品推荐
相关产品推荐

