Fabric.h
template<class Ident, class Ret>
class TCreater
{
typedef Ret (*TFuncCreateObj)();
typedef std::map<Ident, TFuncCreateObj> TMapCreaters;
static TMapCreaters FMapCreaters;
public:
static bool AddType(Ident ANameType, TFuncCreateObj AFuncCreate)
{
FMapCreaters[ANameType] = AFuncCreate;
};
static Ret CreateObj(Ident ANameType)
{
if(FMapCreaters[ANameType] != NULL)
return FMapCreaters[ANameType]();
else
return NULL;
};
};
template<class Ident, class Ret> TCreater<Ident, Ret>::TMapCreaters TCreater<Ident, Ret>::FMapCreaters;
Other.cpp
#include"Fabric.h"
typedef TCreater<String, TObject*> TFabricObj;
namespace{
TObject* CreateObj() { return new TObject(); }
const bool B = TFabricObj::AddType("TObject",CreateObj );
};
Ошибка инициализации статического поля шаблонного класса
Код:
Так вот при добавлении нового типа функцией AddType FMapCreaters почему то еще не создано хотя в h файле объявление стоит.
С чем это может быть связанно?
Цитата: nILruM
Так вот при добавлении нового типа функцией AddType FMapCreaters почему то еще не создано хотя в h файле объявление стоит.
С чем это может быть связанно?
Код:
template <class Ident, class Ret>
typename TCreater<Ident, Ret>::TMapCreaters TCreater<Ident, Ret>::FMapCreaters;
typename TCreater<Ident, Ret>::TMapCreaters TCreater<Ident, Ret>::FMapCreaters;
Цитата: Ramon
Код:
Код :
template <class Ident, class Ret>
typename TCreater<Ident, Ret>::TMapCreaters TCreater<Ident, Ret>::FMapCreaters;
template <class Ident, class Ret>
typename TCreater<Ident, Ret>::TMapCreaters TCreater<Ident, Ret>::FMapCreaters;
А поподробней можно?)
Как можно еще объявить шаблонную статическую переменную?