【问题标题】:Initialize static std::map member inside templated class?在模板类中初始化静态 std::map 成员?
【发布时间】:2012-02-01 08:44:22
【问题描述】:

这是我项目中的代码 sn-p:

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

这是 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++ 不支持 默认整数 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

我希望这段代码就足够了。 我无法使用该地图的“初始化函数”来初始化静态地图成员。 非常感谢!

【问题讨论】:

标签: c++ class templates static


【解决方案1】:

您需要typename 告诉编译器 eventMap 是一个类型。

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

The "typename" keyword

【讨论】:

  • 非常感谢,嗯?!大声笑我不知道。我对模板很陌生。这个类模板现在工作得很好......现在必须解决其他类:D欢呼!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-10
  • 1970-01-01
  • 2011-03-14
  • 2020-10-07
  • 2021-10-21
  • 2019-05-03
相关资源
最近更新 更多