c++ - 通过基类容器访问派生类特有变量的最佳方法

标签 c++

所以我有一个指向基类的指针 vector ,它用于保存派生类的所有实例。

基类:

#ifndef BASE_H
#define BASE_H

Class Base
{
  public:

    virtual void DoSomething();

};

#endif

派生类:

#ifndef DERIVED_H
#define DERIVED_H

#include "base.h"

Class Derived : public Base
{
  public:

    void DoSomething();

    float y;

};

#endif

将这些东西存储在里面:

std::vector<Base*> theVec;

问题是,访问仅存在于 Derived 中的浮点变量“y”的最佳方式是什么?

我可以在 Base 中有一个虚函数,它在 Derived 中指定以返回一个变量,访问方式如下:

theVec[0]->GetVar("y");

但是当 Derived 可能有多个不在基础中的不同类型的变量时,这似乎最终会变得非常困惑。有什么方法可以使访问 Derived 中的唯一变量更通用吗?

如有任何建议,我们将不胜感激!

最佳答案

你使用dynamic_cast

if (Derived* ptr = dynamic_cast<Derived*>(theVec[0])) {
    // do something here
}

关于c++ - 通过基类容器访问派生类特有变量的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6707485/

相关文章:

c++ - 在 C++ 可执行文件中枚举派生类

C++ 标准库 - std::setenv 与 setenv

c++ - 获取模拟 Cairo::Context 以测试路径上的条件

c++ - C++ 模板类中的等效实例

c++ - 如何应对缓慢的 vector<string> 析构函数?

c++ - 如何使用 std::cin 验证十六进制输入?

c++ - 两种方法的推广

.net - 从非特定的 .NET 应用引用特定于平台的库

c++ - 从 C++ 中的输入获取更多行

c++ - 如何将 C/C++ 库代码封装为可在具有多个实例的单独线程中运行?