c++ - 字符串结构体和字符串数组一样吗?

标签 c++ arrays struct casting

我正在处理具有多个结构的代码,其中包含 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/

相关文章:

c++ - Qt项目中operator<<的多重定义

c - typedef 中的动态二维数组

c - 在c中重新分配结构

将 struct 字段转换为 unsigned char 字符串

c++ - 通过在此指针上放置 new 重新初始化对象的未定义行为

c++ - (修订)prefix++和postfix++有什么区别?

javascript - 如何在不使用 eval() 的情况下将数组的内容用作变量?

c++ - HEAP 错误 指定给 RtlValidateHeap 的地址无效

c++ - 如何在 C++ 中使用 ffmpeg 获取视频的 fps?

c++ - 如何使用 std::getline() 将文本文件读入 C++ 中的字符串数组?