gpt4 book ai didi

c++ - 如何巧妙地、多态地用许多不同的成员类型填充对象?

转载 作者:行者123 更新时间:2023-11-28 01:31:43 24 4
gpt4 key购买 nike

是否有一种 OO 模式可以用大量数据填充对象,这些数据在每个对象中通常是多态的?[已编辑] 这里的问题是,在代码的另一部分中,我将有一个指向基类的指针,我想填充该基类指向的具体对象的数据。

  • 我的第一个想法是创建一个带有纯虚方法的基类。因此每个具体对象都将实现其数据的填充方式。然而,随着代码的发展,我注意到基类增长太多,只能存储几十个纯抽象方法,而具体类覆盖了许多不必要的方法,这些方法只在它的 sibling 中有用。

示例:

public Filler
{
virtual void fill_struct1(struct myStruct1) = 0;
virtual void fill_struct2(struct myStruct2) = 0;
// I will need more methods to give the derivate objects the capacity of
// filling its data members polymorphically.
}

class A: public Filler
{
void fill_struct1(struct myStruct1);
void fill_struct2(struct myStruct2);
// There can be more overwritten methods.
struct myStruct1 member_1;
struct myStruct2 member_2;
struct myStruct3 member_3;
// There can be more members of different types.
}

class B: public Filler
{
void fill_struct1(struct myStruct1);
void fill_struct2(struct myStruct2);
void fill_struct4(struct myStruct4);
// There can be more overwritten methods.
struct myStruct1 member_1;
struct myStruct2 member_2;
struct myStruct4 member_3;
// There can be more members of different types. But sometimes the members can be equal one used in a sibling.
}

最佳答案

克服冗余的一种方法是使用模板方法:

template<class T>
void fill_struct1(T& obj)
{
obj.member_1 = ...;
}

这可以在任何具有 member_1 的对象上调用(大概是 myStruct1 类型)。如果您所有的 fill_struct1 方法都做同样的事情,这可能值得研究。

关于c++ - 如何巧妙地、多态地用许多不同的成员类型填充对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51247717/

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