From 8819fdde7a2a655b62bbf5a163e557c703701644 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Mon, 7 May 2007 23:05:17 +0200 Subject: [PATCH] make the code work on g++ 3.4.4 --- src/core/ns-unknown-manager.cc | 6 ++-- src/core/ns-unknown-manager.h | 58 +++++++++++----------------------- 2 files changed, 23 insertions(+), 41 deletions(-) diff --git a/src/core/ns-unknown-manager.cc b/src/core/ns-unknown-manager.cc index 2094ae98f..f20438d4c 100644 --- a/src/core/ns-unknown-manager.cc +++ b/src/core/ns-unknown-manager.cc @@ -76,11 +76,13 @@ NsUnknownManager::LookupByName (std::string name) return ClassId (Singleton::Get ()->LookupByName (name)); } -void -NsUnknownManager::Register (ClassId classId, CallbackBase *callback) +ClassId +NsUnknownManager::Register (std::string name, CallbackBase *callback) { + ClassId classId = ClassId (name); List *list = Singleton::Get (); list->push_back (std::make_pair (classId, callback)); + return classId; } diff --git a/src/core/ns-unknown-manager.h b/src/core/ns-unknown-manager.h index f076f2ede..34440e3ed 100644 --- a/src/core/ns-unknown-manager.h +++ b/src/core/ns-unknown-manager.h @@ -134,27 +134,40 @@ public: * \returns a ClassId which uniquely identifies this constructor. */ template - static ClassId RegisterConstructor (std::string name); + static ClassId RegisterConstructor (std::string name) + { + static Callback callback = + MakeCallback (&NsUnknownManager::MakeObjectZero); + return NsUnknownManager::Register (name, &callback); + } /** * \param name the symbolic name to associate to this * constructor * \returns a ClassId which uniquely identifies this constructor. - * \overload ClassIdRegisterConstructor (std::string) + * \overload ClassId RegisterConstructor (std::string) */ template - static ClassId RegisterConstructor (std::string name); + static ClassId RegisterConstructor (std::string name) + { + static Callback callback = MakeCallback (&NsUnknownManager::MakeObjectOne); + return NsUnknownManager::Register (name, &callback); + } /** * \param name the symbolic name to associate to this * constructor * \returns a ClassId which uniquely identifies this constructor. - * \overload ClassIdRegisterConstructor (std::string) + * \overload ClassId RegisterConstructor (std::string) */ template - static ClassId RegisterConstructor (std::string name); + static ClassId RegisterConstructor (std::string name) + { + static Callback callback = MakeCallback (&NsUnknownManager::MakeObjectTwo); + return NsUnknownManager::Register (name, &callback); + } private: - static void Register (ClassId classId, CallbackBase *callback); + static ClassId Register (std::string name, CallbackBase *callback); template -ClassId -NsUnknownManager::RegisterConstructor (std::string name) -{ - ClassId classId = ClassId (name); - static Callback callback = MakeCallback (&NsUnknownManager::MakeObjectZero); - NsUnknownManager::Register (classId, &callback); - return classId; -} - -template -ClassId -NsUnknownManager::RegisterConstructor (std::string name) -{ - ClassId classId = ClassId (name); - static Callback callback = MakeCallback (&NsUnknownManager::MakeObjectOne); - NsUnknownManager::Register (classId, &callback); - return classId; -} - -template -ClassId -NsUnknownManager::RegisterConstructor (std::string name) -{ - ClassId classId = ClassId (name); - static Callback callback = MakeCallback (&NsUnknownManager::MakeObjectTwo); - NsUnknownManager::Register (classId, &callback); - return classId; -} - - - } // namespace ns3 #endif /* NS_UNKNOWN_MANAGER_H */