gpt4 book ai didi

c++ - 无递归初始化

转载 作者:行者123 更新时间:2023-11-30 20:08:52 24 4
gpt4 key购买 nike

我正在尝试进行一些重构,我很好奇您将如何解决这个问题。

基本上我试图为每个类创建一个初始化函数。有些类是从其他类继承的,如果可能的话,我想使用父初始化函数。您将如何解决这个问题?

我想将这些结构与memcpy一起使用也许也将它们与关键字 align 一起使用和__attribute__((packed)) ;并且它们必须可与 extern "C" 一起使用。我会排除构造函数和析构函数。

举例说明:

struct A
{
int a;
};

void initialize(A& a)
{
a = 0;
}

struct B : A
{
int b;
};

void initialize(B& b)
{
initialize(b); // here I want void initialize(A& a), not recursion
b = 0;
};

也许我必须做一些类型转换?理想情况下,我正在寻找一种不会产生开销的解决方案。

最佳答案

使用 static_cast .

在您的代码中,initialize(b)调用将无限递归,因为 b更好地匹配为 B&A& (您要调用的函数的参数),因此重载决议选择相同的函数并重复。

您指定要初始化 A b的一部分目的。为什么不告诉编译器呢?告诉它你想打电话 initialise就好像它是一个 A ,像这样:

initialize(static_cast<A&>(b));

至于您在评论中提到的担忧 - 这里没有复制。如果我使用static_cast<A>但是,会创建一个临时对象,但事实并非如此。我不类型转换b类型为 A 的对象。我将其转换为 A 类型的引用 ,这将导致创建临时引用。自 A&A& 匹配比 B& 更好,将选择第一个函数,从而避免递归。

关于c++ - 无递归初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55186370/

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