qt实现一个可以接收链表数组和基本数据类型的接口并且不知道形参个数
时间: 2024-01-28 14:03:49 浏览: 64
qt下串口接收数据线程实现
可以使用可变参数模板来实现这个功能,示例代码如下:
```cpp
#include <iostream>
#include <vector>
template<typename... Args>
void printList(Args... args)
{
std::vector<std::vector<int>> intLists;
std::vector<std::vector<float>> floatLists;
// 通过模板递归展开参数包
auto processArg = [&](auto arg)
{
if constexpr (std::is_same_v<decltype(arg), std::vector<int>>)
{
intLists.push_back(arg);
}
else if constexpr (std::is_same_v<decltype(arg), std::vector<float>>)
{
floatLists.push_back(arg);
}
else if constexpr (std::is_arithmetic_v<decltype(arg)>)
{
std::cout << arg << " ";
}
};
(processArg(args), ...);
// 输出链表数组
for (const auto& intList : intLists)
{
std::cout << "[";
for (const auto& item : intList)
{
std::cout << item << " ";
}
std::cout << "] ";
}
for (const auto& floatList : floatLists)
{
std::cout << "[";
for (const auto& item : floatList)
{
std::cout << item << " ";
}
std::cout << "] ";
}
std::cout << std::endl;
}
int main()
{
std::vector<int> intList1 = {1, 2, 3};
std::vector<float> floatList1 = {1.2f, 2.3f, 3.4f};
std::vector<int> intList2 = {4, 5, 6};
int intNum = 7;
float floatNum = 8.9f;
// 调用接口,可以接收任意个数和类型的参数
printList(intList1, floatList1, intList2, intNum, floatNum);
return 0;
}
```
在上述代码中,我们定义了一个可变参数模板函数 `printList`,它接收任意个数和类型的参数 `args`。我们通过模板递归展开参数包,将不同类型的参数分别存储到 `intLists` 和 `floatLists` 中,然后输出整个链表数组。在调用这个接口时,可以传入任意个数和类型的参数,包括链表数组和基本数据类型。
阅读全文