gpt4 book ai didi

c++ - 比较没有数据成员的对象的指针

转载 作者:行者123 更新时间:2023-11-28 06:14:12 25 4
gpt4 key购买 nike

我有以下 Subject-Observer 设计

template<typename Data>
struct Observor{
Observor()
{
}

virtual void process(Data data) = 0;
};

template <typename Data>
class Subject
{
public:

void addObservor(Observor<Data>* observor)
{
_observors.insert(observor);
}

void removeObservor(Observor<Data>* observor)
{
boost::unordered_set<Observor<Data> * > ::iterator itr =
_observors.find(observor);

if(itr != _observors.end() )
{
_observors.erase(observor);
}
}
protected:

boost::unordered_set<Observor<Data>* > _observors;
};

在上面的代码中,Observor 类被所有希望注册到 Subject 的类所继承。在函数 removeObservor 中,当我尝试创建迭代器时出现编译错误。向我建议的解决方案是实现比较器(即 <)。然而,观察者类没有数据成员。我的比较依据是什么?

我想到的解决方案是使用每个观察者派生类(即 Derived1、Derived2)的 typeid。但是,此解决方案仅在集合中每个派生类仅存在一个对象时才有效。由于我可能有多个相同对象类型的实例,所以我不知道如何继续

最佳答案

我猜测错误是 iterator 是一个依赖类型名。将typename添加到迭代器变量声明的前面,或者更好地使用auto

例如,

typename boost::unordered_set<Observor<Data> * > ::iterator itr =
_observors.find(observor);

auto itr = _observors.find(observor);

关于c++ - 比较没有数据成员的对象的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641921/

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