gpt4 book ai didi

c++ - 传存接口(interface)实现

转载 作者:行者123 更新时间:2023-11-28 05:40:26 25 4
gpt4 key购买 nike

假设我们有接口(interface) selector_interface_t 和该接口(interface)的实现 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();
};

现在我们要将实现此接口(interface)的对象传递给类 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();
}

唯一的方法是通过指针或引用传递实现。我更喜欢第二种解决方案并通过引用传递。但由于具有接口(interface)实现的对象的生命周期,我不能简单地将此引用存储在 myclass_t 对象中。最好复印一份。但是我不能有 selector_interface_t 字段成员。我只能有这种类型的引用或指针。另一方面,我想避免使用 malloc。我可以用它做什么?

最佳答案

如果您是创建 selector_interface_t 类型的人,那么您可以将其存储在 shared_ptr 中,并让 myclass_t 类持有接口(interface)的 weak_ptr 或 shared_ptr。

如果您不是创建 selector_interface_t 的人,那么我假设您有其他方法让对象保持事件状态,将其包装在一个管理生命周期的类中,并将该对象包装在 shared_ptr 中。

关于c++ - 传存接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37236077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com