C++ c++;当强制类型仅为字符串时,使用动态强制类型转换
我有几个类是从另一个类派生出来的C++ c++;当强制类型仅为字符串时,使用动态强制类型转换,c++,types,casting,dynamic-cast,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); 我想遍历列表,用fuName创建fu对象,如果可能的话
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);
我想遍历列表,用fuName创建fu对象,如果可能的话,可以这样做:
type fuName = dynamic_cast<type *>(fu);
type fuName=dynamic_cast(fu);
另一个问题是我无法更改fu及其派生类
我希望你能理解我想要的东西。 < P>你没有在C++中的思考,因此你不能轻易地完成你想要做的事情。 我所看到的每一次试图破解语言内部反射的尝试都被证明是很好的。。只是一个非常糟糕的黑客 另一种解决方案是尝试将其强制转换为所有派生类,如果转换不成功,dynamic_cast将返回一个nullptr
这表示存在设计问题,但是,您不需要这样做。如果您有一个类名列表和执行强制转换的替代方法,那么您需要检查指针的typeid,然后将字符串与列表进行比较,以获得要调用的方法,有关typeid的更多信息,请阅读此也许其他人可以确认,但我看到的主要问题是,在编译过程中必须知道变量名,因此试图在运行时从
字符串创建这些名称是行不通的。这有点混乱,但听起来您可能需要一个工厂。。。基本思想是使用一些输入(如类型名称)在多个new-DerivedX
/new-DerivedY
/。。。案例。该函数返回一个基类指针,以便于在容器中存储混合的运行时类型。基类需要一个虚拟析构函数代码>可能是type*fuName=dynamic\u cast(fu)代码>或类型fuName=*动态(fu)代码>这似乎是一种情况,在这种情况下,了解您试图用非抽象的术语实现什么是很有帮助的,因为您正在描述的反射类型目前实际上是不可能的。谁在创造这些富物?你能控制那个代码吗?谁在消费这些物品?你能控制那个代码吗?你的问题不存在于真空中。即使这可以做到,你会如何利用它?如果您在compiletime不知道派生类的类型,则不能在fuName
上调用派生类的方法。我会使用返回函数名称的静态方法手动执行此操作。typeid不可移植。@dau_sama这也是一个解决方案,如果typeid适用于他的环境,也可以。
type fuName = dynamic_cast<type *>(fu);