gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:10:48 26 4
gpt4 key购买 nike

我要实现的是以下行为:

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

关于c++ - C++将对象强制转换为其原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60895141/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com