gpt4 book ai didi

c++ - 如何强制实现者做某事

转载 作者:搜寻专家 更新时间:2023-10-30 23:49:34 25 4
gpt4 key购买 nike

假设我有以下类:

class X;
class Y;

class Collection
{
public:
virtual void AddItemX(X*) = 0;
virtual void AddItemY(Y*) = 0;
//So on...
};

class Collector
{
public:
virtual void Fill(Collection&) = 0;
};

有什么方法可以确保 Collector 类的实现将填充传递的 Collection 类中的所有需要​​的项目?

最佳答案

给定已知数量的 AddItemX() 调用的一种方法是将那些 AddItem() 函数移动到 protected 并让 Collection 类跟踪添加和数量,例如:

(我实际上不喜欢这个解决方案,大声笑,但考虑到您的设计就足够了:)

class X;
class Y;

class Collection
{
private:
int m_nItems;
int m_nItemsAdded;

protected:
virtual void AddItemXImpl(X&) = 0;
virtual void AddItemYImpl(Y&) = 0;

public:
Collection() : m_nItems(2), m_nItemsAdded(0){};

void AddItemX(X& _x) {m_nMethodsAdded++; AddItemXImpl(_x); };
void AddItemY(Y& _y) {m_nMethodsAdded++; AddItemYImpl(_y); };

// function to find out if we're filled
bool isFilled() const {return(m_nItemsAdded == m_nItems); };
}; // eo class Collection

编辑:为澄清起见,您的收集器可以这样实现:

class Collector
{
protected:
virtual void FillImpl(Collection& _collection) = 0;

public:
void Fill(Collection& _collection)
{
FillImpl(_collection);
if(!_collection.isFilled())
throw(std::exception("Not filled dammit!"));
};
}; // eo class Collector

关于c++ - 如何强制实现者做某事,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4086868/

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