gpt4 book ai didi

c++ - 维护 ABI : adding constructor to struct

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:52 26 4
gpt4 key购买 nike

我们在共享库的修订版 1 中有一个结构,我们需要为其维护 ABI:

struct Person
{
std::string first_name;
std::string last_name;
}

在修订版 2 中,我们将 Person 更改为:

class Person
{
public:
Person(const std::string &f, const std::string &l);

std::string first_name;
std::string last_name;
}

为了保持源兼容性,我们想修改 Person 的版本 1,以便针对较新的头文件编译的代码将运行,而未重新编译的代码将运行。

我们可以使用两个新的非内联构造函数执行以下操作吗:

class Person
{
public:
Person();
Person(const std::string &f, const std::string &l);

std::string first_name;
std::string last_name;
}

我们正在使用 g++ 来完成这一切。在使用 nm 查看生成的共享库时,我没有看到普通结构的构造函数或析构函数,所以我猜测没有重新编译的代码将像以前一样在调用站点构造 Person,这很好。任何重新编译的代码都将使用无参数构造函数。

我看到的唯一问题是,如果我们需要回滚到没有构造函数的共享库的旧版本,那么针对它编译的任何代码都会中断,但我不担心这种情况。

最佳答案

接下来呢?

class NewPerson : public Person
{
public:
NewPerson(const std::string &f, const std::string &l)
{
first_name = f;
last_name = l;
}
}

关于c++ - 维护 ABI : adding constructor to struct,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3419387/

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