这是我的问题,简单来说:
enum AnimalType_t { DOG = 0, GREY_HOUND = 1, IMMORTAL_JELLYFISH = 2, }; struct RawData_t { int age; AnimalType_t typeOfAnimal; }; RawData_t GetMyCurrentRawData();//returns the current raw data bool IsDataReady(); //returns true if data is ready, false otherwise
class Animal { public: virtual Animal(); virtual ~Animal(); int GetType() { return rawAttributes.typeOfAnimal; }; //the only implementation for all children virtual int GetAge() { return rawAttributes.age; }; //to be implemented in the child class virtual void UpdateAge() { rawAttributes.age++; }; //to be implemented in the child class virtual int GetNumberOfLegs() = 0; //to be implemented in the child class private: RawData_t rawAttributes; }
class Dog : public Animal { public: Dog(RawData rawData):Animal(rawData){}; int GetNumberOfLegs() {return 4;}; }; class GreyHound : public Dog { public: GreyHound(RawData rawData):Dog(rawData){}; }; class ImmortalJellyFish : public Animal { public: ImmortalJellyFish(RawData rawData):Animal(rawData){}; int GetNumberOfLegs() {return 0;}; void UpdateAge() { return;} override; };
class Building { public: Building(){}; //sorry for the long line, but you get the idea... int Display(void){if(IsDataReady()) DisplayOnScreen("This animal ( "+ animal_m.GetType()+") has " + animal_m.GetNumberOfLegs() + "legs and is " + animal_m.GetAge() + " years old\n";}; int Live(void){currentDiagCode_m.UpdateAge();}; private: auto animal_m; //?? not working }; static Building paddock; static Building farm; void Buildings_Step(void) { paddock.Live(); paddock.Display(); farm.Live(); farm.Display(); }
这就是我挣扎的地方:
以下是我的限制:
我虽然关于:
有什么设计/模型可以满足我的需求吗?
谢谢大家!
在C中,内存分配和对象存在是两个独立的概念,即使在大多数情况下您将同时处理这两个概念。但是,在您的情况下,您可能希望显式地将两者分开:
>
为任何对象创建足够的内存:
char buf[N]; // N >= sizeof(T) for all T in your hierarchy
要创建动物:
new (buf) GreyHound(args);
要摧毁现有的动物(并为其他动物腾出空间):
reinterpret_cast<Animal*>(buf)->~Animal();
也就是说,您将存储作为容器对象的一部分获得,但您可以通过放置新的显式销毁来动态管理Animal对象的生命周期。
还有一点:你的内存还需要为你在其中构建的所有类型正确对齐。您可以使用一些库助手特性,如std::aligned_storage
或std::aligned_union
来简化计算,尽管您可能仍需要做一些工作来计算大小和对齐。
作为一个完全独立的替代方案,您可以放弃多态类层次结构,改用std::variant
。这在概念上是相似的,但在实现方面有点不同。这在概念上是相似的,因为您有一组有界的类型,所以在运行时不需要多态性来处理任意的、未知的派生类型。
我在理解如何将另一个类中的动态值分配到其他变量时遇到了一些问题-我尝试使用正确的名称空间、正确的语法并阅读错误提供的文档-但是即使尝试实现所示的示例,也没有运气。我对C#知之甚少,因为我主要从事前端工作,但我必须在我工作的公司里逐步提高并开始学习一些面向后端的东西 我目前的代码如下: BrazeConnectionInputs.cs CreateCampaign.cs
问题内容: 当您知道on上对象/项目的确切数量时,我非常想知道哪种内存分配方法对性能(例如,运行时间)有利,这对性能有好处。少量对象(少量内存)和大量对象(大量内存)的成本。 与 请告诉我。谢谢。 注意:我们可以对此进行基准测试,并且可能知道答案。但是我想知道解释这两种分配方法之间性能差异的概念。 问题答案: 静态分配将更快。静态分配可以在全局范围和堆栈上进行。 在全局范围内,静态分配的内存内置在
当您知道中对象/项的确切数量时,我很想知道内存分配的首选方法是什么对性能(例如,运行时间)有好处Linux。少量对象(少量内存)和大量对象(大量内存)的成本。 例如,类型A【N】vs 请让我知道。非常感谢。 注意:我们可以对此进行基准测试,并可能知道答案。但我想知道解释这两种分配方法之间性能差异的概念。
问题内容: 我正在尝试为如下对象创建动态映射: 我希望属性为嵌套类型,该类型是我在下面的映射中使用nested_feature模板定义的,并且按预期工作。但是,我也想让属性的嵌套对象中的每个属性都带有定义的其他属性。我尝试了第二个nested_template模板,但没有成功。 不幸的是,属性中的属性是从另一个进程创建的,几乎可以是任何名称/值对。关于如何使用动态模板将属性设置为嵌套的任何建议,以
我试图为对象创建一个动态映射,如下所示:
动态内存分配 我们之前在 C/C++ 语言等中使用过 malloc/free 等动态内存分配方法,与在编译期就已完成的静态内存分配相比,动态内存分配可以根据程序运行时状态修改内存申请的时机及大小,显得更为灵活,但是这是需要操作系统的支持的,同时也会带来一些开销。 我们的内核中也需要动态内存分配。典型的应用场景有: Box<T> ,你可以理解为它和 malloc 有着相同的功能; 引用计数 Rc<T