- 论坛徽章:
- 0
|
VC8的查找规则不了解,代码在VC9编译也是同样的错误。下面是完整代码。
- #include <iostream>
- #include <vector>
- #include <string>
- using namespace std;
- template <class T>
- class TypeMessage {
- static vector<class Handler*> registry;
- public:
- class Handler {
- public:
- Handler() { TypeMessage<T>::registerHandler( this ); }
- virtual void handleEvent(const T* t) = 0;
- };
- void notify() {
- for(int i = 0; i < registry.size(); i++)
- registry.at(i)->handleEvent( (T*)this );
- }
- static void registerHandler(Handler* h) { registry.push_back( h ); }
- };
- class On : public TypeMessage<On> {
- string comment;
- public:
- On(string str) { comment = str; }
- void start() const { cout << "OnEvent.start - " << comment << '\n'; }
- };
- vector<TypeMessage<On>::Handler*> TypeMessage<On>::registry;
- class Off : public TypeMessage<Off> {
- string comment;
- public:
- Off( string str ) { comment = str; }
- void stop() const { cout << "OffEvent.stop - " << comment << '\n'; }
- };
- vector<TypeMessage<Off>::Handler*> TypeMessage<Off>::registry;
- class MasterConsole : public On::Handler, public Off::Handler {
- public:
- void handleEvent(const On* msg) {
- cout << "MasterConsole - ";
- msg->start();
- }
- void handleEvent(const Off* msg) {
- cout << "MasterConsole - ";
- msg->stop();
- }
- };
- class PowerMonitor : public On::Handler {
- public:
- void handleEvent(const On* msg){
- cout << "PowerMonitor - ";
- msg->start();
- }
- };
- int main(){
- MasterConsole mc;
- PowerMonitor pm;
- On oneEvent( " lights " ); Off thrEvent( " elevators " );
- On twoEvent( " hvac " ); Off fouEvent( " frontDoor " );
- oneEvent.notify();
- twoEvent.notify();
- thrEvent.notify();
- fouEvent.notify();
- return 0;
- }
复制代码 |
|