特定基类的抽象类的C ++ Vector,作为另一个类成员

狐狸

我有:

  1. 基类抽象Shape
  2. 然后,几个子类,其中一个是Rectangle
  3. 为了创建GeneralObject,一个名为GeneralObject <T>的模板类具有私有成员T形状T具有对Shape的子对象的静态断言检查):GeneralObject<Rectangle>
  4. 我要包含GeneralObject向量的ObjectManager

我应该如何实现此功能,以使Template类的向量具有任意形状?

我想一种方法是从3)中删除静态断言并创建类似以下内容的方法:

std::vector<GeneralObject <std::shared_ptr<Shape>>> objects;

但是我不确定我是否遵循正确的方法。如果我还可以断言模板函数使用Shape的子代,那就太好了。

德特尔

将的成员更改GeneralObjectT而不是的指针T

template<typename T>
class GeneralObject {
public:
  GeneraObject(std::shared_ptr<T> object) : object(object) {}

private:
  std::shared_ptr<T> object;
};

您可以将其用作

auto gObj = GeneralObject<Shape>(std::make_shared<Rectangle>());

您的容器将是

std::vector<GeneralObject<Shape>> objects;
objects.emplace_back(std::make_shared<Rectangle>());
objects.emplace_back(std::make_shared<Circle>());

总而言之,像这样:

#include <iostream>
#include <memory>
#include <vector>

struct Shape {
  virtual void draw() const = 0;
};

struct Rectangle : Shape {
  void draw() const override { std::cout << "Rectangular drawing\n"; };
};

struct Circle : Shape {
  void draw() const override { std::cout << "Circular drawing\n"; };
};

template <typename T>
class GeneralObject {
 public:
  GeneralObject(std::shared_ptr<T> object) : object(object) {}

  void draw() const { object->draw(); }

 private:
  std::shared_ptr<T> object;
};

int main() {
  std::vector<GeneralObject<Shape>> objects;
  objects.emplace_back(std::make_shared<Rectangle>());
  objects.emplace_back(std::make_shared<Circle>());

  for (const auto& obj : objects) obj.draw();
}

这将输出

Rectangular drawing
Circular drawing

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#抽象类具有另一个抽象类对象

来自分类Dev

可以抽象类继承另一个抽象类C#

来自分类Dev

可以抽象类继承另一个抽象类C#

来自分类Dev

抽象类C ++

来自分类Dev

C ++:抽象类

来自分类Dev

如何初始化作为另一个类的成员变量的基类对象?

来自分类Dev

从抽象基类访问另一个基类成员

来自分类Dev

创建一个类实例作为另一个类的成员

来自分类Dev

C#:调用通过另一个抽象类实现的抽象类方法

来自分类Dev

防止暴露基类(抽象类)

来自分类Dev

另一个抽象类和非抽象类对抽象类的继承

来自分类Dev

实例化另一个抽象类的内部抽象类

来自分类Dev

什么是抽象类从另一个抽象类扩展的重要性

来自分类Dev

实例化另一个已实现的抽象类的抽象类

来自分类Dev

C#抽象类-“一个或另一个”替代功能

来自分类Dev

C ++从另一个类访问类成员

来自分类Dev

抽象类C#

来自分类Dev

界面与抽象类C ++

来自分类Dev

在C ++中使用另一个头文件中的抽象类

来自分类Dev

抽象类和基类一样吗?

来自分类Dev

如何使用另一个类的公共成员函数作为参数调用线程

来自分类Dev

Android:将成员传递给另一个类的方法作为参考?

来自分类Dev

通过作为另一个类的成员函数的友元函数设置值

来自分类Dev

对作为另一个类成员的函数的未定义引用

来自分类Dev

为什么Resharper宁愿不隐藏另一个抽象类中的抽象类的属性?

来自分类Dev

使用另一个对象的方法实例化一个抽象类?

来自分类Dev

使用另一个对象的方法实例化一个抽象类?

来自分类Dev

与抽象基类中的抽象类成员一起工作的最佳方法?

来自分类Dev

将具有基类的抽象类转换为接口C#

Related 相关文章

热门标签

归档