make the code work on g++ 3.4.4

Mathieu Lacage 2007-05-07 23:05:17 +02:00
parent 1808ad3c6d
commit 8819fdde7a
2 changed files with 23 additions and 41 deletions

View File

@ -76,11 +76,13 @@ NsUnknownManager::LookupByName (std::string name)
return ClassId (Singleton<CidManager>::Get ()->LookupByName (name)); return ClassId (Singleton<CidManager>::Get ()->LookupByName (name));
} }
void ClassId
NsUnknownManager::Register (ClassId classId, CallbackBase *callback) NsUnknownManager::Register (std::string name, CallbackBase *callback)
{ {
ClassId classId = ClassId (name);
List *list = Singleton<List>::Get (); List *list = Singleton<List>::Get ();
list->push_back (std::make_pair (classId, callback)); list->push_back (std::make_pair (classId, callback));
return classId;
} }

View File

@ -134,27 +134,40 @@ public:
* \returns a ClassId which uniquely identifies this constructor. * \returns a ClassId which uniquely identifies this constructor.
*/ */
template <typename T> template <typename T>
static ClassId RegisterConstructor (std::string name); static ClassId RegisterConstructor (std::string name)
{
static Callback<NsUnknown *> callback =
MakeCallback (&NsUnknownManager::MakeObjectZero<T>);
return NsUnknownManager::Register (name, &callback);
}
/** /**
* \param name the symbolic name to associate to this * \param name the symbolic name to associate to this
* constructor * constructor
* \returns a ClassId which uniquely identifies this constructor. * \returns a ClassId which uniquely identifies this constructor.
* \overload ClassIdRegisterConstructor (std::string) * \overload ClassId RegisterConstructor (std::string)
*/ */
template <typename T, typename T1> template <typename T, typename T1>
static ClassId RegisterConstructor (std::string name); static ClassId RegisterConstructor (std::string name)
{
static Callback<NsUnknown *,T1> callback = MakeCallback (&NsUnknownManager::MakeObjectOne<T,T1>);
return NsUnknownManager::Register (name, &callback);
}
/** /**
* \param name the symbolic name to associate to this * \param name the symbolic name to associate to this
* constructor * constructor
* \returns a ClassId which uniquely identifies this constructor. * \returns a ClassId which uniquely identifies this constructor.
* \overload ClassIdRegisterConstructor (std::string) * \overload ClassId RegisterConstructor (std::string)
*/ */
template <typename T, typename T1, typename T2> template <typename T, typename T1, typename T2>
static ClassId RegisterConstructor (std::string name); static ClassId RegisterConstructor (std::string name)
{
static Callback<NsUnknown *,T1,T2> callback = MakeCallback (&NsUnknownManager::MakeObjectTwo<T,T1,T2>);
return NsUnknownManager::Register (name, &callback);
}
private: private:
static void Register (ClassId classId, CallbackBase *callback); static ClassId Register (std::string name, CallbackBase *callback);
template <typename T1, typename T2, template <typename T1, typename T2,
typename T3, typename T4, typename T3, typename T4,
@ -263,39 +276,6 @@ NsUnknownManager::MakeObjectTwo (T1 a1, T2 a2)
return new T (a1, a2); return new T (a1, a2);
} }
template <typename T>
ClassId
NsUnknownManager::RegisterConstructor (std::string name)
{
ClassId classId = ClassId (name);
static Callback<NsUnknown *> callback = MakeCallback (&NsUnknownManager::MakeObjectZero<T>);
NsUnknownManager::Register (classId, &callback);
return classId;
}
template <typename T, typename T1>
ClassId
NsUnknownManager::RegisterConstructor (std::string name)
{
ClassId classId = ClassId (name);
static Callback<NsUnknown *,T1> callback = MakeCallback (&NsUnknownManager::MakeObjectOne<T,T1>);
NsUnknownManager::Register (classId, &callback);
return classId;
}
template <typename T, typename T1, typename T2>
ClassId
NsUnknownManager::RegisterConstructor (std::string name)
{
ClassId classId = ClassId (name);
static Callback<NsUnknown *,T1, T2> callback = MakeCallback (&NsUnknownManager::MakeObjectTwo<T,T1, T2>);
NsUnknownManager::Register (classId, &callback);
return classId;
}
} // namespace ns3 } // namespace ns3
#endif /* NS_UNKNOWN_MANAGER_H */ #endif /* NS_UNKNOWN_MANAGER_H */