c++ - 运行相同函数名 C++ 的多个类的列表
问题描述
我有多个具有相同功能的类,如下所示
class A
{
void display()
{
// display something
}
};
class B
{
void display()
{
// display something two
}
};
我想将差异类存储在列表或向量中并循环以调用具有相同名称的相同函数
int main()
{
A * a;
B * b;
//list or vector to store object
std::vector < Something that can store different class > listofclass;
listofclass.emplace_back(a);
listofclass.emplace_back(b);
for (int i = 0; i < listofclass.size(); i++)
{
listofclass[i].display();
}
}
有可能这样做吗?因为有单独的类,具有不同的目的,现在我尝试将它们组合在一起或者有其他替代方法来实现这样的事情
解决方案
如果您控制 and 的定义A
,B
您可以编写一个公共基类,并让它们继承它。
class can_display {
public:
virtual void display() = 0;
virtual ~can_display() = default;
};
class A : public can_display
{
void display() override
{
// display something
}
};
class B : public can_display
{
void display() override
{
// display something two
}
};
int main()
{
A a;
B b;
std::vector<can_display *> displayables;
displayables.push_back(&a);
displayables.push_back(&b);
for (can_display * displayable : displayables)
{
displayable->display();
}
}
作为更改定义A
并B
从公共基础继承的替代方法,您可以拥有一个继承的包装器。
template <typename T>
class can_display_impl {
T * wrapped;
public:
can_display_impl(T * wrapped) : wrapped(wrapped) {}
void display() override { wrapped->display(); }
}
template <typename T>
std::unique_ptr<can_display> make_can_display(T & wrapped) {
return std::make_unique<can_display_impl<T>>(&wrapped);
}
int main()
{
A a;
B b;
std::vector<std::unique_ptr<can_display>> displayables;
displayables.emplace_back(make_can_display(a));
displayables.emplace_back(make_can_display(b));
for (auto & displayable : displayables)
{
displayable->display();
}
}
推荐阅读
- ros - ROS melodic - gps_goal 包 - 机器人向与目标相反的方向前进
- javascript - Load font from googleapis after page loading in react.js
- vue.js - 如何在 vue.js 中连接两个过滤值?
- c++ - 我有一个指向 items 类对象的指针列表。如何访问对象的功能?
- python - 在特定点切片 DataFrame 并绘制每个切片
- db2 - 是否可以将 DB2 z/OS 和 DB2 LUW 与 DB2 z/OS 作为请求者一起加入?
- javascript - 如何在python中检查输入类型文件之一是否为空
- ethernet - 如何在 u-boot 中通过 i2c 写入寄存器
- python - 使用 pandas groupby 根据时间间隔获取频率计数
- java - 如何处理 REST 服务中的错误请求