我有一个名为MyClass
的类,该类已由另一个类订阅。当某些事件发生时,MyClass
应该通知订户。我正在尝试将模板用于订户的类型。因为我不想让其他人(负责订户类的人)需要关心修改MyClass
以进行订阅。所以我在下面写了代码,
class MyClass {
public:
template<typename T>
void subscribeEvents(const T &controller)
{
m_subscriber = static_cast<T*>(m_subscriber);
m_subscriber = &controller;
}
void notifyPositionChanged(const long &position) const {
(m_subscriber)->onPositionChanged(position);
}
private:
void m_subscriber; // will be changed to array or something else
}
实际上controller
对象有一个名为onPositionChanged
的方法。
但是,您知道,该行未编译。
(m_subscriber)->onPositionChanged(position);
现在,我明白了为什么会出错,但问题是我不知道如何修改代码或更改设计。请让我知道我的缺失和误解。提前致谢。
您的模板做错了。您应该在类级别而不是方法上使用模板。不涉及演员表。
template<typename T>
class MyClass {
T m_subscriber;
}