C++ 无递归初始化
我正在尝试进行一些重构,我很好奇您将如何处理这个问题 基本上,我试图为每个类创建一个初始化函数。有些类继承自其他类,如果可能的话,我想使用父初始化函数。你将如何解决这个问题 我想将这些结构与C++ 无递归初始化,c++,c,inheritance,recursion,struct,C++,C,Inheritance,Recursion,Struct,我正在尝试进行一些重构,我很好奇您将如何处理这个问题 基本上,我试图为每个类创建一个初始化函数。有些类继承自其他类,如果可能的话,我想使用父初始化函数。你将如何解决这个问题 我想将这些结构与memcpy一起使用,也可以将它们与关键字align和\uuuuuu属性((打包))一起使用;而且它们必须与extern“C”一起使用。我将排除构造函数和析构函数 举例说明: struct A { int a; }; void initialize(A& a) { a = 0
memcpy
一起使用,也可以将它们与关键字align
和\uuuuuu属性((打包))
一起使用;而且它们必须与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;
};
也许我得做些演员?理想情况下,我正在寻找一种不会产生开销的解决方案。使用
静态\u cast
在您的代码中,initialize(b)
调用将无限递归,因为b
比A&
更适合作为b&
(您要调用的函数的参数),因此重载解析选择相同的函数并递归
您指定要初始化b
对象的A
部分。为什么不告诉编译器呢?告诉它您想在其中调用初始化
,就像它是一个A
,如下所示:
initialize(static_cast<A&>(b));
初始化(静态_cast(b));
至于你在评论中提到的问题,这里没有复印件。但是,如果我使用了
static\u cast
,则会创建一个临时对象,但事实并非如此。我不是将b
强制转换为a
类型的对象。我将其转换为a
类型的引用,这将导致创建临时引用。由于<>代码> A/<代码>与