gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:56:33 24 4
gpt4 key购买 nike

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com