【发布时间】:2015-12-28 21:19:22
【问题描述】:
我一直在尝试抽象类型。 下面的代码给了我想要的效果。
class base{
public:
virtual void do_stuff() = 0;
};
class derived: public base{
public:
void do_stuff(){/*stuff*/}
};
class manager{
vector<shared_ptr<base>> ptrs;
public:
void add(base* ptr){
ptrs.emplace_back(ptr);
}
};
manager foo;
foo.add(new derived());
很好,花花公子,但这很尴尬,因为用户不仅要处理指针,而且必须使用 new 而不调用 delete。我的问题是,是否有一种方法可以让manager 的用户不必处理指针或new。
foo.add(derived()); //example
我尝试实现这一点的最终结果是:
class manager{
vector<shared_ptr<base>> ptrs;
public:
void add(base& ref){
ptrs.emplace_back(&ref);
}
};
但是,编译器说no known conversion from 'derived' to 'base&'。我不知道如何使对base 的引用与对derived 的引用兼容。我该如何解决这个问题?
【问题讨论】:
-
别忘了给
base添加一个virtual析构函数。 -
如果您的经理使用共享指针,为什么不直接将共享指针作为
add方法的参数?
标签: c++ pointers reference virtual abstract