cod*_*ddy 2 c++ static templates class
这是我项目的代码片段:
template<typename Second, typename First = const UINT64>
class Event : virtual public id_manager<>
{
friend class EventHandler;
typedef std::map<First, EventHandler> eventMap;
static eventMap mapper;
static eventMap StartMapping()
{
eventMap temp;
return temp;
}
public:
Event(){}
void operator+=(EventHandler _handler)
{
mapper[this->getID()] = _handler;
}
};
// INITIALIZATION FAILED HERE:
template<typename Second, typename First = const UINT64>
Event<Second, First>::eventMap Event<Second, First>::mapper(Event<Second, First>::StartMapping());
Run Code Online (Sandbox Code Playgroud)
这是Visual Studio 2010的输出错误:
警告1警告C4346:'Event :: eventMap':依赖名称不是类型c:\ users\admin\documents\visual studio 2010\projects\cppsystem\cppsystem\main.cpp 67错误2错误C2143:语法错误:缺失';' 在'Event :: mapper'c:\ users\admin\documents\visual studio 2010\projects\cppsystem\cppsystem\main.cpp之前67错误3错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持default-int c:\ users\admin\documents\visual studio 2010\projects\cppsystem\cppsystem\main.cpp 67错误4错误C1903:无法从先前的错误中恢复; 停止编译c:\ users\admin\documents\visual studio 2010\projects\cppsystem\cppsystem\main.cpp 67
我希望这段代码足够了.我无法使用该地图的"初始化功能"初始化静态地图成员.非常感谢!
您需要typename告诉编译器eventMap是一个类型.
template<typename Second, typename First = const UINT64>
typename Event<Second, First>::eventMap Event<Second, First>::mapper(Event<Second, First>::StartMapping());
Run Code Online (Sandbox Code Playgroud)