【发布时间】:2016-05-15 08:29:14
【问题描述】:
假设我们有接口 selector_interface_t 和该接口的实现 pin_selector_t。
class selector_interface_t
{
public:
virtual void select(uint8_t address) = 0;
virtual void deselect() = 0;
};
class pin_selector_t : public selector_interface_t
{
private:
uint8_t mask;
public:
pin_selector_t(uint8_t mask);
void select(uint8_t address);
void deselect();
};
现在我们要将实现此接口的对象传递给myclass_t 类并存储以供其他myclass_t 方法(例如strobe)将来使用。
class myclass_t
{
private:
selector_interface_t * selector;
public:
myclass_t(selector_interface_t & selector);
void strobe(uint8_t pin);
};
myclass_t::myclass_t(selector_interface_t & selector) // : selector(selector)
{
// ...
}
void myclass_t::strobe(uint8_t pin)
{
this->selector->select(pin);
this->selector->deselect();
}
唯一的方法是通过指针或引用传递实现。我更喜欢第二种解决方案并通过引用传递。但是我不能简单地将这个引用存储在myclass_t 对象中,因为具有接口实现的对象的生命周期。最好是复印一份。但我不能有selector_interface_t 字段成员。我只能有对这种类型的引用或指针。另一方面,我想避免使用 malloc。我能用它做什么?
【问题讨论】:
标签: c++ interface parameter-passing pass-by-reference