gpt4 book ai didi

C++ 创建具有不同字段组合的类的变体

转载 作者:行者123 更新时间:2023-11-28 03:58:45 25 4
gpt4 key购买 nike

模板允许在 C++ 中自动创建许多具有相同接口(interface)但存储不同数据的类。

我正在寻找类似的东西(我不知道它是否存在,这就是我在这里问的原因)自动为我创建仅存储数据成员子集的对象的变体。

假设我有一个

class FullClass
{
public:
bool A;
int B;
float C;
double D;
};

然后我想要这些字段的所有可能组合,例如:

class BDClass
{
public:
int B;
double D;
};

class BCDClass
{
public:
int B;
float C;
double D;
};

我希望能够从任何变体类转换为 FullClass,以便复制定义的字段,并将缺少的字段设置为默认值:

FullClass foo;
BDClass bar = BDClass(3, 5.0);
foo = (FullClass) bar;

是否有任何机制让编译器为我创建这些变体,还是我必须自己定义所有可能的组合?

谢谢!

编辑:

我为什么要找这个?

我有一个遵循策略模式的软件结构。因此,我有一堆使用相同接口(interface)的不同算法(超过 30 个)。客户端应该能够在不知道当前正在运行的确切算法的情况下使用此接口(interface)。客户端计算这样一个“FullClass”对象并通过接口(interface)传递它——然而,每个算法只使用这个对象中提供的字段的一个子集(每个算法使用不同的字段)。这个策略模式结构是固定的,我不能改变它。

现在我想“记录”此类生成的“FullClass”对象的序列,以便可以重复使用此构造的完整流程,而无需重新计算那些“FullClass”对象。然而,这是很多数据(出于性能原因我想保留在主内存中)并且由于大多数算法只使​​用字段的一小部分,我只想存储有效使用的字段

最佳答案

我什至无法想象你为什么需要这个,但你可以尝试使用 mixins:

class Dummy
{
};

<template Base>
class AClass : public Base
{
public:
bool A;
};

<template Base>
class BClass : public Base
{
public:
int B;
};

... //( etc)

BClass< AClass<Dummy>> abClass;
abClass.B = 4;
abClass.A = false;

如果你坚持下去,你将能够做到:

DClass< CCLass< BClass< AClass<Dummy>>>> abcdClass;

关于C++ 创建具有不同字段组合的类的变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1995271/

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