我有一些基础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/