c++有一个struct结构体,里面有三个参数,不知道参数的属性名是什么,但直到同时存在int、float、double、string等多种类型,有一个数组,数组里面有三个数,编写一个for循环,将数组的数按照先后顺序,赋值到struct结构体中
时间: 2024-09-22 07:01:19 浏览: 32
详解C++程序中定义struct结构体的方法
5星 · 资源好评率100%
在C++中,如果你有一个不确定属性名但知道其数据类型的`struct`,并且你需要从数组中按顺序填充这些值,你可以创建一个`struct`实例并动态地使用`memcpy()`函数或者逐个类型匹配赋值。假设这个`struct`的类型可以接受任意一种类型的成员,我们可以这样做:
```cpp
#include <iostream>
#include <string>
// 定义一个可以接受多种类型的基本结构体模板
template <typename T>
struct MyStruct {
T int_field;
float float_field;
double double_field;
std::string string_field;
};
void fillStructFromArray(MyStruct<int>& int_struct, const T* array) {
// 检查类型并逐个赋值
if (std::is_same<T, int>::value) {
int_struct.int_field = array[0];
} else if (std::is_same<T, float>::value) {
int_struct.float_field = static_cast<float>(array[0]);
} else if (std::is_same<T, double>::value) {
int_struct.double_field = array[0];
} else if (std::is_same<T, std::string>::value) {
int_struct.string_field = array[0]; // 字符串需要转换为std::string形式
}
}
int main() {
// 示例数组,包含不同类型的数据
T mixed_array[] = {42, 3.14, 123.456, "Hello"};
// 创建MyStruct实例,用于存储混合数组的数据
MyStruct<int> int_struct;
fillStructFromArray(int_struct, mixed_array);
// 打印结果
std::cout << "int_field: " << int_struct.int_field << std::endl;
std::cout << "float_field: " << int_struct.float_field << std::endl;
std::cout << "double_field: " << int_struct.double_field << std::endl;
std::cout << "string_field: " << int_struct.string_field << std::endl;
return 0;
}
```
阅读全文