我有几个派生自另一个类的课程。
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及其派生类......
我希望你明白我的意思。
答案 0 :(得分:0)
你没有C ++中的反射,因此你无法轻易实现你想要做的事情。 我所看到的每一次尝试破解语言内部的反思,都证明是好的......只是一个非常糟糕的黑客。
另一种解决方案是尝试将其强制转换为所有派生类,如果强制转换不成功,dynamic_cast将返回nullptr。
这表示设计问题,但不应该需要这样做。
答案 1 :(得分:0)
如果你有一个类名列表和替代方法来进行强制转换,那么你需要检查指针的typeid然后将字符串与你的列表进行比较以获得要调用的方法,有关typeid的更多信息,请阅读此{ {3}}