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
方法(例えば。strobe
)による将来の使用のためのクラスmyclass_t
とストアにこのインタフェースを実装しています。
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の使用を避けたいと思います。私はそれで何ができますか?