c++使用dynamic_cast来转换类型仅为string

c++ use dynamic_cast when casting type is only known as string

本文关键字:类型 string 转换 使用 dynamic cast c++      更新时间:2023-10-16

我有几个类派生自另一个类。

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

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

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

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

另一个问题是我不能改变fu和它的派生类…

我希望你明白我想要什么

您在c++中没有反射,因此您无法轻松实现您想要做的事情。我所见过的每一次破解语言内部反射的尝试都被证明是有效的……只是一个非常糟糕的黑客。

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

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

如果你有一个类名列表和可供选择的方法来进行强制转换,那么你需要检查指针的typeid,然后将字符串与列表进行比较,以获得要调用的方法,有关typeid的更多信息请阅读http://en.cppreference.com/w/cpp/language/typeid

相关文章: