模板型别推导

ParamType是指针或者引用

型别推导规则

  • 若表达式具有引用型别,先将引用部分忽略;
  • 对表达式的型别和param的型别执行模式匹配,来决定T的型别;
param引用无const修饰
template<typename T>
void f(T& param);

int x = 1 ;
const int cx = x ;
const int& rx = x ;

f(x) ; 
f(cx);  
f(rx);
函数调用T的型别param的型别
f(x)intint&
f(cx)const intconst int&
f(rx)const intconst int&
param引用存在const修饰
template<typename T>
void f(const T& param);

int x = 1 ;
const int cx = x ;
const int& rx = x ;

f(x) ; 
f(cx);  
f(rx);
函数调用T的型别param的型别
f(x)intconst int&
f(cx)intconst int&
f(rx)intconst int&
param指针无const修饰
template<typename T>
void f(T* param);

int x = 1 ;
const int* px = &x ;

f(x) ; 
f(px);  
函数调用T的型别param的型别
f(x)intint*
f(px)const intconst int*

param万能引用

template<typename T>
vodi f(T&& param);

int x = 1;
const int cx= x ;
const int& rx = x ;
f(x);
f(cx);
f(rx);
函数调用T的型别param的型别
f(x)int&int&
f(cx)const int&const int&
f(rx)const int&const int&
f(27)int&&int&&

param非引用和指针,按值传递

template<typename T>
void f(T param);
int x = 1;
const int cx= x ;
const int& rx = x ;
const char* const px = "123"; 
f(x);
f(cx);
f(rx);
f(px);
函数调用T的型别param的型别
f(x)intint
f(cx)intint
f(rx)intint
f(27)intint
f(px)const char*const char*

数组实参

  • 数组按值传递将会退化成指针;
  • 如果保持数组的型别,则需要按引用方式传递实参

总结

  • 在模板推导过程中,具有引用型别的实参会被当成非引用型别来处理即其引用性被忽略;
  • 万能引用形参推导时,左值实参会进行特殊处理;
  • 按值传递的推导时,若形参中带有const和valotaile修饰则会被忽略;
  • 数组和函数型别的实参会退化成对应的指针,除非他们被用来初始化引用;
### Node-RED 中现报表功能的方法 Node-RED 是一种基于流的编程工具,广泛用于物联网 (IoT) 和其他事件驱动的应用程序开发。尽管它本身并不直接提供内置的报表生功能,但可以通过与其他技术集现这一目标。 以下是几种常见的方法和示例代码片段: #### 方法一:通过 HTTP 请求调用第三方服务生报表 可以利用 Node-RED 的 `http request` 节点连接到支持 API 接口的服务(如 Google Sheets、Microsoft Power BI 其他云服务),并将数据发送过去以生报表。 ```javascript // 使用 inject 节点触发请求并设置 payload 数据 msg.payload = { data: [ { name: 'John', age: 30 }, { name: 'Anna', age: 25 } ], reportType: 'PDF' }; return msg; ``` 此方式依赖于外部系统的处理能力[^1]。 #### 方法二:借助模板引擎渲染 HTML 页面作为报表 如果希望在本地生简单的报表文件,则可考虑采用 Handlebars.js 等 JavaScript 模板库配合 node-red-contrib-handlebars 插件完自定义布局设计工作。 假设我们已经安装好了上述插件之后,在 function 节点里编写如下逻辑即可: ```javascript var templateStr = ` <html> <head><title>My Report</title></head> <body> <h1>User List</h1> <ul>{{#each users}}{{this.name}} - {{this.age}} years old<br />{{/each}}</ul> </body> </html>`; msg.template = templateStr ; msg.context={users:[ {"name":"Alice","age":28}, {"name":"Bob", "age":34} ]}; return msg; ``` 随后将消息传递给 handlebars 输出节点转换最终形式。 #### 方法三:导出 CSV 文件供下载查看 对于只需要展示纯文本别的统计数值情况来说,创建 csv 格式的文档可能是最简便快捷的选择之一 。下面给出了一段示范如何构建这样的流程的例子: ```javascript let rows = []; for(let i=0;i<5;i++)rows.push({colA:i,colB:String.fromCharCode(65+i)}); msg.payload = require('csv-stringify/sync')(rows,{header:true}); return msg; ``` 最后一步只需附加 file out 节点指定保存路径名即大功告! --- 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值