Вложенный шаблон наблюдателя
Мне нужно шаблон наблюдателя с моими классами уведомлений. Я использую этот код:
#include <Poco/Notification.h>
#include <Poco/Observer.h>
#include <Util/RegisterObserver.h>
namespace RPC {
class ParseErrorNotify : public Poco::Notification{
public:
ParseErrorNotify();
private:
//std::string m_message;
};
template <class C>
class Observer:public Poco::Observer<C,ParseErrorNotify>{
public:
typedef Poco::Observer<C,ParseErrorNotify> Base;
Observer(C& object, Base::Callback method):Base(object,method){}
};
}
Но у меня ошибка при компиляции:
ParseErrorNotify.h: 20: 35: ошибка: "Poco::Base::Callback" не является типом
Я использую gcc версии 4.7.3 (Ubuntu/Linaro 4.7.3-1ubuntu1). Это так странно, потому что с MSVC2010 на компиляции win все в порядке.
1 ответ
Решение
Это не странно. Вы должны использовать typename
,
Observer(C& object, typename Base::Callback method):Base(object,method){}
поскольку Callback
является зависимым именем Прочитайте это Где и почему я должен поставить ключевые слова "template" и "typename"? для дополнительной информации.