我想将一个基类指针转换为派生类指针,作为函数参数传递,但是不使用dynamic_pointer_cast。
class Base
{
public:
typedef std::shared_ptr < Base > Ptr;
virtual ~Base ( );
...
};
class Derive : public Base
{
public:
typedef std::shared_ptr < Derive > Ptr;
...
};
void foo( Derive::Ptr ptr )
{
...
}
Base::Ptr ptr1 ( new Derive );
foo( ptr1 );
在调用foo时,上面的代码将会出现错误。可以通过使用std::dynamic_pointer_cast将ptr1强制转换为一个派生指针来避免这种情况。
Base::Ptr ptr1 ( new Derive );
foo ( std::dynamic_pointer_cast < Derive > ( ptr1 ) );
我希望创建一个回调函数映射表,该表将自动类型转换基类指针,并根据派生类的类型调用相应的函数。
foo
构建一个调度机制,根据派生类的类型将其分派到相应的实现上,但这并不简单。 - R Sahu