C ++将对象强制转换为其原始类型

贝托99

我要实现的是以下行为:

int main(){
   vector<Component*>v = {...};
   draw(dynamic_cast< ??? >v[0]);
}
 void draw(const Image& i){...}
 void draw(const Text& i){...}
 void draw(const Link& i){...}

Image, Text, Link哪里派生类Component,但我不知道< >在动态类型转换的内容中放什么,或者至少是否有另一种方法可以做到这一点。

目前,我在想的是使用variant,但是要获取该元素,我需要std::get在必须指定类型的地方调用,因此在同一点上。

所以在这一点上,我认为唯一的方法是创建if(dynamic_cast<>(v[0])具有所有可能类型的列表...

羊毛之星

如果您确实使用了variant,则可以使用它std::visit来确定要调用哪种形式的draw函数,只要您不需要其他参数,或者它们在类型之后都使用相同的参数即可:

for ( auto & vitem : in v ) // where v is a vector of variant
  std::visit([](auto && shape){ draw( shape ); }, vitem);

有关更多详细信息,请参见https://en.cppreference.com/w/cpp/utility/variant/visit

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

防止将对象强制转换为C ++以外的任何类型

C#使用类型参数将对象强制转换为类

将对象强制转换为C#类

C#将对象强制转换为存储在字符串变量中的另一种类型

将对象数组转换为其原始类型的数组

为什么在c#中将对象强制转换为具有相同值的T类型的对象时,识别的对象不相同?

在 C# 中,您可以将对象类型向上转换为通用“对象”的集合类型吗?

在 C# 中不使用反射将对象转换为用户定义类型的类对象

将对象转换为C#类

Objective-C:将对象类型转换为 integer_t

如何在不使用C#明确检查类型的情况下自动将对象转换为具体类型?

使用AutocompleteStringCollection时C#无法将对象类型数组转换为字符串类型数组

C#-强制转换是否保留对原始对象的引用?

应该使用哪种类型的C ++强制转换将结构的指针强制转换为其第一个成员?

如何将对象转换为C ++ / CLI中我不知道类型参数的通用列表?

C#-将对象转换为画笔(WPF)

C#如何将对象转换为XML

ZXingObjc-将对象c转换为swift

将对象模型转换为c#中的json?

在C ++中将对象的地址转换为char *或char数组

使用泛型将对象强制转换为其父类型

将对象强制转换为未知数据类型

如何判断原始类型是否被强制转换为Java对象?

重新解释强制转换为不同类型的C ++

强制转换为定义的C#类型时发生InvalidCastException

C ++类型将int强制转换为union

C是否允许将结构类型强制转换为自身?

在C#中强制转换为反射类型

在C#中强制转换为任何类型的泛型