gpt4 book ai didi

C++ 在构造函数中使用 "initializer"类是否合适/明智?

转载 作者:行者123 更新时间:2023-11-28 03:14:51 26 4
gpt4 key购买 nike

我有一个包含多个派生类的类,每个派生类都有自己的构造函数。

class A
{
public:
static A *create_new_A(int child_ID);

member_data;
void method();
};

class A_child_0 : public A
{
A_child_0(int child_ID);
//stuff
};

class A_child_1 : public A
{
A_child_1(int child_ID);
//stuff
};
etc...

在主文件中,它们被调用为:

A **array;
array = new A *[nchildren];
for (int i = 0 ; i < nchildren ; i++)
{
array[i] = A->create_new_A( i );
}

其中 A 是一个看起来像这样的工厂:

A* A::create_new_A(int child_ID)
{
if (child_ID == 0)
{
return new A_child_0(child_ID);
}
if (child_ID == 1)
{
return new A_child_1(child_ID);
}
}

现在,当调用 A_child_n 的构造函数时,现在我在 member_data 值的初始化中有一堆过程命令,这些命令在派生类之间略有不同,例如,

A_child_0(int child_ID)
{
member_data.vector1[0] = 0;
for (i = 0; i < 200; i++)
member_data.vector2[0] = i;
read_in_conf_file("conf.txt")
// etc....
}

A_child_1(int child_ID)
{
member_data.vector1[0] = 0;
for (i = 0; i < 50; i++)
member_data.vector2[0] = i*i;
read_in_conf_file("conf.txt")
// etc....
}

我很好奇是否有更好的方法来解决这个问题。现在我正在考虑封装很多这些程序步骤,所以它看起来像

A_child_0(int child_ID)
{
initializer_class *intializer;
initializer->initialize(child_ID);
}

A_child_1(int child_ID)
{
initializer_class *intializer;
initializer->initialize(child_ID);
}

并有一个类 initializer() 来实现不同类的初始化步骤。我想这大概是受到了策略模式的启发。有人对这种方法是否合适或明智有任何建议吗?或者它只是将问题委托(delegate)给初始化程序类并增加了一层复杂性。如果这样做不是一个好主意,可以做些什么来避免让构造函数成为一个冗长的 C 程序?

编辑:正如一些人指出的那样,工厂指定不正确。在我给出的示例中,它仍然没有真正完善,但它不像以前那样离谱。

最佳答案

您可能想看看 std::generate与适当的生成仿函数结合。你的生成器可以完成初始化你想要的数据的艰苦工作,保持你的类的界面相对干净(如果你想保持私密性,你可能需要让你的生成器成为你的类的 friend )。

关于C++ 在构造函数中使用 "initializer"类是否合适/明智?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17238906/

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