我要实现的是以下行为:
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] 删除。
我来说两句