gpt4 book ai didi

c++ - 将基本结构分配给派生结构

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:38:09 24 4
gpt4 key购买 nike

我使用结构来表示写入文件的数据。如果我需要向该结构添加成员(即保存额外数据),我会创建一个从原始结构派生的新结构(这代表数据集的新版本)。例如:

struct data1
{
int stuff1;
int stuff2;
};

struct data : data1
{
int stuff3;
};

通过检查我们是否正在加载 data1 来维护向后兼容性,如果是,则将其转换为 data(并且仅对 中的那些新成员进行值初始化>数据)。最好的方法是什么?这是我已经开始的:

if( loaded_data.size() == sizeof(data1) ) {
// Old data format detected, upgrade to new structure
data d = data(); // value-initialize everything
// TODO: Assign 'data1' to 'data'
}

我曾想过在 data 中放置一个构造函数以从 data1 中复制,但这会破坏我获得的免费值初始化(我必须那时实现我自己的默认构造函数)。我应该使用 memcpy(),还是有更好的内置方法(也许是复制语义的一些技巧)?

最佳答案

#include <cstdio>

struct A {
int a;
};

struct B : A {
int b;
};

int main()
{
A a;
a.a = 42;
B b;
b.a = 0;
b.b = 42;
(A&)b = a;

printf("%s\n", b.a == b.b?"it works":"nope");
}

关于c++ - 将基本结构分配给派生结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12483663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com