我有base class
priority_queue
,如下所示:
class base
{
//...
std::priority_queue<std::shared_ptr<Obj>, std::vector<std::shared_ptr<Obj>>, obj_less> obj_queue;
//...
}
在我的Obj class
上,我有一个方法可以将此对象推送到priority_queue
:
void Obj::set ()
{
BaseServer& myObj = BaseFactory::getBase();
myObj.set(this); //<------ won't compile :(
}
此set()
会在set()
上拨打base class
:
void base::set(const Obj& o)
{
obj_queue.push(o);
}
我想使用this
来获取指向同一Obj
的指针,然后将其推送到我的vector
内的priority_queue
.... / p>
但它甚至不会编译,我有点迷失......
我在这里缺少什么想法?
答案 0 :(得分:5)
你实际上不应该这样做,因为它真的很糟糕,你只会在Obj
上有原始指针而不是调用{{1功能。您的代码的想法很奇怪,但使用set
和shared_ptr
实际上更好。
enable_shared_from_this
class Obj : public std::enable_shared_from_this<Obj>
{
public:
// ...
void set()
{
BaseServer& myObj = BaseFactory::getBase();
myObj.set(std::shared_from_this()); //<------ won't compile :(
}
};
应该有BaseServer
功能,在set
上接收shared_ptr
。当然,您应该在代码中使用Obj
,并调用shared_ptr<Obj>
。比如像这样的东西
set
答案 1 :(得分:0)
myObj.set(this);
传递指针,但是
void base::set(const Obj& o)
期待一个对象。
做
void base::set(const Obj *o)
{
obj_queue.push(*o);
}
或者
myObj.set(*this);