当cast类型只被称为字符串

时间:2015-05-19 09:49:26

标签: c++ types casting dynamic-cast

我有几个派生自另一个类的课程。

class t1 : fu
class t2 : fu
....

我必须首先动态创建fu的对象,然后将其转换为派生类。

这将是一种静态的工作方式:

t1 vart1_1 = dynamic_cast<t1 *>(fu1);
t1 vart1_2 = dynamic_cast<t1 *>(fu2);
t2 vart2_1 = dynamic_cast<t2 *>(fu3);

问题是,我不知道在运行时间以及我有多少fu-object。

我得到的是一个列表

list[]={{string type, string fuName},{string type, string fuName}, ...}

我想遍历列表,使用fuName创建fu对象,如果可能的话,可以这样做:

type fuName = dynamic_cast<type *>(fu);

另一个问题是我无法改变fu及其派生类......

我希望你明白我的意思。

2 个答案:

答案 0 :(得分:0)

你没有C ++中的反射,因此你无法轻易实现你想要做的事情。 我所看到的每一次尝试破解语言内部的反思,都证明是好的......只是一个非常糟糕的黑客。

另一种解决方案是尝试将其强制转换为所有派生类,如果强制转换不成功,dynamic_cast将返回nullptr。

这表示设计问题,但不应该需要这样做。

答案 1 :(得分:0)

如果你有一个类名列表和替代方法来进行强制转换,那么你需要检查指针的typeid然后将字符串与你的列表进行比较以获得要调用的方法,有关typeid的更多信息,请阅读此{ {3}}