【发布时间】:2022-01-05 13:23:26
【问题描述】:
请看这个简短的函数:
void SEMTools::pack_CT_CMD(CT_CMD_t cmd)
{
QByteArray payload(8, 0);
uint8_t len, ide;
int txId = Pack_CT_CMD_can(&cmd, reinterpret_cast<uint8_t *>(payload.data()), &len, &ide);
QCanBusFrame txFrame = QCanBusFrame(txId, payload);
_can->sendFrame(txFrame);
}
我需要大约 20 个这个“模板”函数,其中唯一改变的是:
-
CT_CMD_t,这是一个结构,我有20个不同的结构 -
Pack_CT_CMD_can,它是一个函数,我有20个不同的结构
我的目标是只写一个这样的函数(元代码):
void SEMTools::pack_CMD(<generic-struct> cmd, <generic-func> func)
{
QByteArray payload(8, 0);
uint8_t len, ide;
int txId = func(&cmd, reinterpret_cast<uint8_t *>(payload.data()), &len, &ide);
QCanBusFrame txFrame = QCanBusFrame(txId, payload);
_can->sendFrame(txFrame);
}
那么,我会这样使用(还是元代码):
CT_CMD_t cmd1;
AB_CMD_t cmd2;
Pack_CT_CMD_can func1;
Pack_AB_CMD_can func2;
pack_CMD(cmd1, func1);
pack_CMD(cmd2, func2);
我不确定在这里使用template 是否是正确的方法,或者有更好的方法。
【问题讨论】:
-
你有 20 个结构和 20 个函数,它们需要匹配吗,或者相同的结构可以与任何函数一起使用?
-
每个结构都匹配其相关功能。它们不能混用。