将子类转换为父C++



我有以下父类:

namespace dataserver {
class Request_manager {
public:
class Ticket {
public:
virtual void start(){};
virtual ~Ticket();
explicit Ticket(System_time start_time);
protected:
System_time const& start_time() const { return m_start_time; }
System_time m_start_time;
private:
std::time_t m_key;
std::size_t m_request_id;
};
static int num_connected() { return m_connected; }
private:
static int m_connected;
};
} // namespace dataserver
#endif // _DATASERVER_REQUEST_MANAGER_H_

还有一个儿童班:

namespace dataserver {
namespace pointdata {
class Ticket : Request_manager::Ticket,
public std::enable_shared_from_this<Ticket> {
public:
Ticket(Batch_request rq, Data_interface* dataserver,
xxx::service::Service_ticket tix, System_time start_time);
void start();
private:
void serialize(std::vector<Future<Group_result>> data_f);
void failed(std::exception_ptr error);
};
}
} // namespace dataserver::pointdata
#endif // _DATASERVER_POINTDATA_TICKET_H_

我有来自Request_manager的其他子类,我想把它们一起保存在队列中。假设我不需要创建父类的任何对象。为了实现这一点,我有一个类Tickets_Queue

using namespace dataserver;
class Tickets_Queue{
private:
std::queue <std::shared_ptr<Request_manager::Ticket>> m_ticket_queue;
public:
Tickets_Queue();
~Tickets_Queue();
void push(std::shared_ptr<Request_manager::Ticket> ticket);
};
#endif /* _TICKETS_QUEUE_H_ */

要推动不同类型的孩子我做:

std::shared_ptr<Request_manager::Ticket> ticket = std::make_shared<Ticket>(...,
..., ..., ...);
ticket_queue_->push(ticket);

这给了我错误:

error: conversion from ‘std::shared_ptr<dataserver::pointdata::Ticket>’ to non-scalar type ‘std::shared_ptr<dataserver::Request_manager::Ticket>’ requested

编辑

正在尝试:std::shared_ptr向基类上转换-最佳方法?仍然给我同样的错误:

error: conversion from ‘std::shared_ptr<dataserver::pointdata::Ticket>’ to non-scalar type ‘std::shared_ptr<dataserver::Request_manager::Ticket>’ requested

问题可能与私有继承有关。

#include <iostream>
class A {};
class B: public A {}; //<-- fails to compile if "public" is omitted
int main()
{
std::shared_ptr<A> a(new B);
}

最新更新