c++ - 在没有虚拟原型(prototype)的情况下调用继承类的一种方法

标签 c++ inheritance boost

我有一些基础class A ,以及一些继承的类:

class B : public A
class C : public A
class D : public A

我有解析一些配置文件的功能,它在配置调用中使用名称:

void do_smth<B>(...);
void do_smth<C>(...);
void do_smth<D>(...);

我有map<A*> objs;在这些函数中发生了:

void do_smth<T>(...)
{
  T *control = new T();
  ...
  objs[name] = T;
}

所以我有指向 A 的指针映射。在其他函数中我得到 name ,我需要获取存储在 B、C 或 D 类中的值。 问题是我无法将虚函数添加到任何将返回这些值的类,因为库中的 A、B、C、D 和 B 具有函数 value()、C - text()、D - currentValue() 等.我需要功能get_value()这将返回 value(), text(), currentValue() 的结果取决于类(class)? 你能建议我什么来解决我的问题?

我看到两种方法:

1) 我可以从指向类 B、C、D 的指针编写函数并调用类似的函数 get_value((B*)objs[name]);但我觉得这样不好。

2)我可以创建boost::bind具有我需要的函数的对象,用于创建 B、C、D 变量。

什么方法会更好,或者你能给我更好的建议吗?

最佳答案

所以你有

A* a;

并且不知道它是什么类型。尝试dynamic_cast:

B* b = dynamic_cast<B*>(a);
if ( b ) 
    return b->value();
//C and D the same way

关于c++ - 在没有虚拟原型(prototype)的情况下调用继承类的一种方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6926922/

相关文章:

c# - 泛型、继承和转换

java - 使用Selenium Webdriver和Cucumber继承Java中的xpath字符串

c++ - 安全地取消 boost asio 截止时间计时器

c++ - 在 Boost Python 中包装数组

c++ - 在 atom 中编译但不在终端中编译

c++ - 具有 STL 算法和 std::execution::par 执行策略的迭代器

c++ - SetDIBits 可以直接绘制到屏幕或监视器吗?

C++常量混淆

java - 继承和静态嵌套 Java 类

c++ - 以 C++11 方式重写 boost 风格的代码(Boost.Bind、Boost.Function)