我正在处理具有多个结构的代码,其中包含 string
-仅限字段。例如:
struct record {
string first;
string second;
string third;
string Nth;
};
这些目前都是从数据库加载并存储在不同的 map<string, somestruct>
中。 -- 每个都有一个单独的方法。方法是相同的(除了 SQL 查询和字段名称)——每个查询的第一个字段成为映射的索引,后续字段形成结构的字段:
void
LoadFoo()
{
rows = RunSQLQuery("SELECT key, first, second FROM sometable");
for (auto row = rows.cbegin(); row != rows.cend(); row++) {
struct record r = {
first = row[1];
second = row[2];
};
Foos.insert(make_pair(row[0], r));
}
}
我想将这些方法统一为一个,能够初始化具有不同数量字段和不同字段名称的结构。
这个新方法将接收要运行的 SQL 查询和(空)map
。该方法将知道查询返回的字段总数,但无法通过名称引用各个字段 - 只能通过序列号。
如果可以将上述结构安全地转换为string[N]
,那就可以了。 。可以吗?
(不,我不想“正式”将 struct
更改为数组,因为字段名称在应用程序的其余部分实际使用时才有意义。)
最佳答案
您可以对指定成员的数组进行引用,如下所示:
struct record {
std::string items[3];
std::string& first = items[0];
std::string& second = items[1];
std::string& third = items[2];
};
int main()
{
record r{"a", "b", "c"};
std::cout << r.first << ' ' << r.second << ' ' << r.third << '\n';
}
输出:
a b c
关于c++ - 字符串结构体和字符串数组一样吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65376065/