C++ 将派生类指针强制转换为基类指针并强制转换回的问题

C++ 将派生类指针强制转换为基类指针并强制转换回的问题,c++,inheritance,smart-pointers,C++,Inheritance,Smart Pointers,我对最近看到的一个设计感到困惑。它在主函数中初始化派生类对象,并将其作为基类对象传递到函数中。然后,在函数内部,再次将对象指针转换回派生类。这是一种设计模式还是应该避免 此外,在指针转换为基类并再次返回到派生类之后,将使用派生类专用的成员变量。指针如何在进程结束后轻松找到变量 class Base { // something } class Derived : public Base { public: void funcDerived() {return x;} i

我对最近看到的一个设计感到困惑。它在主函数中初始化派生类对象,并将其作为基类对象传递到函数中。然后,在函数内部,再次将对象指针转换回派生类。这是一种设计模式还是应该避免

此外,在指针转换为基类并再次返回到派生类之后,将使用派生类专用的成员变量。指针如何在进程结束后轻松找到变量

class Base
{
    // something
}

class Derived : public Base
{
public:
    void funcDerived() {return x;}
    int x = 0;
}

int process(std::shared_ptr<Base> const& var)
{
    auto new_var = std::dynamic_pointer_cast<Derived>(var);
    return new_var->funcDerived();
}

int main()
{
    auto derived = std::make_shared<Derived>(new Derived());
    derived->x = 5;
    process(derived);

    return 0;
}
类基
{
//某物
}
派生类:公共基
{
公众:
void funcDerived(){return x;}
int x=0;
}
int进程(std::shared_ptr const&var)
{
自动新建\u var=std::动态\u指针\u转换(var);
返回新的_var->funcDerived();
}
int main()
{
自动派生=标准::使_共享(新派生());
导出->x=5;
过程(衍生);
返回0;
}
编辑:
要添加此设计的一些细节,基类是一个抽象类,而不同版本有多个派生类。函数
process()
是一个接口保持完整的API。它的行为由条件编译指令控制。

不理想,但在某些情况下可能是一种解决方案。取决于上下文。你有更多的细节吗?编辑:您可能应该检查动态强制转换的返回,看看它是否有效。
Base
是否有任何虚拟函数?
process()
在取消引用之前不检查强制转换是否成功。我得说那是不正常的,等待时机不好。这是在我们讨论整个共享与独特的事情之前。这里的方式我不明白为什么它应该有用。我的意思是至少添加
进程
作为
静态
成员函数:一个可以传递另一个
共享的ptr
,该ptr继承自
,但不是
派生的类型
,然后
新的变量
将是
空ptr
。这个功能似乎有些多余。如果你看到的是一种负面情绪,你就会看到一种错误的设计(p<0.05)。2.指针不需要“查找”任何内容。无论指向它的指针来自何处,类型为
派生的
的对象看起来与任何其他类型为
派生的
的对象完全相同。这是C++对象的基本属性。因此,只要我们有一个指向
派生的
的指针,我们就是好的。