简体   繁体   English

在模板化类中初始化静态std :: map成员?

[英]Initialize static std::map member inside templated class?

Here is a code snippet from my project: 这是我的项目中的代码片段:

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());

Here is output error from Visual studio 2010: 这是Visual Studio 2010的输出错误:

Warning 1 warning C4346: 'Event::eventMap' : dependent name is not a type c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67 Error 2 error C2143: syntax error : missing ';' 警告1警告C4346:'Event :: eventMap':相关名称不是类型c:\\ users \\ admin \\ documents \\ visual studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67错误2错误C2143:语法错误:缺少';' before 'Event::mapper' c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67 Error 3 error C4430: missing type specifier - int assumed. 在“事件::映射器”之前c:\\ users \\ admin \\ documents \\ visual studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67错误3错误C4430:缺少类型说明符-假定为int。 Note: C++ does not support default-int c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67 Error 4 error C1903: unable to recover from previous error(s); 注意:C ++不支持default-int c:\\ users \\ admin \\ documents \\ visual studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67错误4错误C1903:无法从以前的错误中恢复; stopping compilation c:\\users\\admin\\documents\\visual studio 2010\\projects\\cppsystem\\cppsystem\\main.cpp 67 停止编译c:\\ users \\ admin \\ documents \\ Visual Studio 2010 \\ projects \\ cppsystem \\ cppsystem \\ main.cpp 67

I hope this pice of code is enough. 我希望这些代码足够了。 I can't initialize static map member using "initialization functin" for that map. 我无法使用该地图的“初始化函数”来初始化静态地图成员。 thanks alot! 非常感谢!

You need typename to tell the compiler that the eventMap is a type. 您需要使用typename来告诉编译器eventMap是一种类型。

template<typename Second, typename First = const UINT64>
typename Event<Second, First>::eventMap Event<Second, First>::mapper(Event<Second, First>::StartMapping());

See The "typename" keyword 请参见“ typename”关键字

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM