我有以下主题观察设计
package com.foo.core;
@Stateless
public class MyFacade { }
在上面的代码中,Observor类由希望注册到Subject的所有类继承。在函数removeObservor中,当我尝试创建迭代器时出现编译错误。向我建议的解决方案是实现比较器(即<)。但是Observor类没有数据成员。我的比较器基于什么?
我想到的解决方案是使用每个observor派生类的typeid(即Derived1,Derived2)。但是,只有在集合中只存在每个派生类的一个对象时,此解决方案才有效。由于我可能有多个相同对象类型的实例,我仍然坚持如何继续
答案 0 :(得分:1)
我猜测错误是iterator
是一个依赖类型名称。
将typename
添加到迭代器变量说明的前面,甚至更好地使用auto
。
例如
typename boost::unordered_set<Observor<Data> * > ::iterator itr =
_observors.find(observor);
或
auto itr = _observors.find(observor);