【发布时间】:2021-11-02 23:57:54
【问题描述】:
以下问题。我正在做一个更大的 c++ 项目。该项目有一个中心数据类:mal::FrameAudio,数据类如下所示:
class FrameAudio {
public:
typedef Eigen::Matrix<unsigned char, Eigen::Dynamic, Eigen::Dynamic> pluginType;
...
const pluginType& getPlug() const;
void setPlug(const pluginType& plugin);
...
现在我想扩展软件的一些功能,在我的情况下我需要一个不同的pluginType:
typedef Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> pluginType;
如何在不破坏其余代码功能的情况下实现新的 dataType?
-
继承?我想过做这样的 FrameAudioFloat: public FrameAudio。但是数据存储在软件中更早地被初始化,超出了我的功能,据我所知,当指针设置为基类时,您只能使用派生类的覆盖函数。所以我不能调用 getPlug() 因为它有另一个返回类型。
-
模板?我在考虑创建一个模板类?但是我看到代码经常使用数据存储的 typedef。你会经常在代码中找到这样的东西:
const mal::FrameAudio::pluginType& plugins = aFrame.getPlug();
我什至在其他类的成员定义中发现了 typedef。那么,对我来说,用新的 typedef 和函数扩展这个类的最简单方法是什么?现在,如果我的功能适用于新的 typedef 并且其余代码仍然适用于旧的,这对我来说就足够了。也许使用 auto 作为 typedef?
【问题讨论】:
-
请问起源问题是什么? (对于以下问题)
-
也许
std::variant是一个选项,虽然不是在 C++17 之前。
标签: c++ inheritance typedef