我正在使用示例http://www.codeproject.com/Articles/3267/Implementing-a-Subject-Observer-pattern-with-templ来实现模板化主题/观察者模式。然而,我看起来像继承不工作,或一个奇怪的演员恼人的编译错误。任何帮助都会很棒。在帖子的底部是引起问题的线路。C++模板化主题观察者继承/ Cast冲突
错误
FooManager.h: In member function
'ReturnEnum FooManager::AddBar(BarPtr)':
Foo.h:150: error: no matching function for call to
'Bar::attach(FooManagerPtr)'
Subject.h:23: note: candidates are:
void Subject<T>::attach(Observer<T>) [with T = boost::shared_ptr<Bar>]
守则
types.h中
class Bar;
typedef boost::shared_ptr<Bar> BarPtr;
class FooManager;
typedef boost::shared_ptr<FooManager> FooManagerPtr;
Observer.h
#include "types.h"
template <class T>
class Observer
{
public:
Observer(){}
virtual ~Observer() {}
virtual void update(T subject) = 0;
};
Subject.h
#include "types.h"
template <class T>
class Subject
{
private:
vector< Observer<T> > m_observers;
public:
Subject() {}
virtual ~Subject() {}
void attach(Observer<T> observer)
{
m_observers.push_back(observer);
}
void notify()
{
for(vector< Observer<T> >::iterator it = m_observers.begin(); it != m_observers.end(); ++it)
{
(*it)->update(static_cast<T>(this));
}
}
};
Bar.h
#include "types.h"
class Bar : public Subject<BarPtr>
{
};
FooManager.h
#include "types.h"
class FooManager : public Observer<BarPtr>
{
public:
ReturnEnum AddBar(BarPtr pBar)
{
pBar->attach(FooManagerPtr(this, boost_null_deleter()));
}
};
您正在尝试发送一个'提振:: shared_ptr'此功能:'无效附加(Observer observer)',因为'FooManagerPtr'是'boost :: shared_ptr' –
2012-07-16 15:54:54