基于子类类型的C++动态模板参数问题求解
如何从BaseShape指针创建特化的RenderCommand实例?
我正在做第一个C++项目来学习这门语言,之前大部分问题要么自己解决了,要么查资料搞定了,但最近碰到一个问题,找不到太满意的解决方案,想听听资深开发者的建议。
问题详情
- 我定义了抽象基类
BaseShape,多个具体形状类(比如Triangle、Circle、Rectangle)都继承自它 - 我有一个模板类
RenderCommand<Shape>,针对每个具体形状都做了特化实现 - 现在有一个数组,里面混存了多个
BaseShape*类型的指针
我的核心问题是:怎么从这些BaseShape指针创建对应特化的RenderCommand实例?我试过动态类型转换,也考虑过用多态虚方法,但感觉这俩都不是最优解。
补充说明
我已经找到一个能运行的方案,但意识到它可能违反了不少最佳实践,所以还是希望能得到其他思路。下面是类结构的伪代码,方便理解:
RenderCommands.h
struct BaseRenderCommand { virtual void execute() = 0; // 包含相机及其他渲染选项相关内容 }; template<class Shape> struct RenderCommand : public BaseRenderCommand { RenderCommand(Shape *shape) {/* 构造逻辑 */}; virtual void execute(); // 其他成员 };
Shapes.h
struct BaseShape { // 典型形状信息,如中心位置 }; struct Triangle : public BaseShape { // Triangle专属成员 }; struct Circle : public BaseShape { // Circle专属成员 }; struct Rectangle : public BaseShape { // Rectangle专属成员 };
内容的提问来源于stack exchange,提问作者Mr Coke
相关产品推荐
相关产品推荐

