我们假设我们有接口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。我能用它做什么?