gpt4 book ai didi

C++ 以编程方式转换 : can it be done?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:48:28 24 4
gpt4 key购买 nike

假设我有一个Base 类和几个Derived 类。有什么方法可以将对象转换为派生类之一而无需编写如下内容:


string typename = typeid(*object).name();
if(typename == "Derived1") {
Derived1 *d1 = static_cast< Derived1*>(object);
}
else if(typename == "Derived2") {
Derived2 *d2 = static_cast < Derived2*>(object);
}
...
else {
...
}

最佳答案

不要。

阅读多态性。几乎每一种“动态转换”情况都是多态难以实现的例子。

无论您在动态类型转换中做出什么决定,都已经做出了。只需将实际工作委托(delegate)给子类即可。

您遗漏了示例中最重要的部分。有用的多态性工作。

string typename = typeid(*object).name();
if(typename == "Derived1") {
Derived1 *d1 = static_cast< Derived1*>(object);
d1->doSomethingUseful();
}
else if(typename == "Derived2") {
Derived2 *d2 = static_cast < Derived2*>(object);
d2->doSomethingUseful();
}
...
else {
...
}

如果每个子类都实现了 doSomethingUseful,这一切就简单多了。并且是多态的。

object->doSomethingUseful();

关于C++ 以编程方式转换 : can it be done?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/243082/

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