小编Mar*_*sko的帖子

模板定义非模板错误

我想将CRTP模式与一些锁定机制结合使用,以便在多线程环境中进行访问同步.

我的代码看起来像这样:

//-- CRTP base class with some sync/lock mechanism
template<typename T, typename SYNC>
struct Base {
  static std::unordered_map<int, std::string> s_map;
  static SYNC s_sync;
};

//-- derived class using CRTP
template<typename SYNC>
struct ProductX : public Base<ProductX<SYNC>, SYNC> {};

//-- static initialisation
template<typename SYNC>
std::unordered_map<int, std::string> Base<ProductX<SYNC>, SYNC>::s_map {
  { 1, "value_1" },
  { 2, "value_2" }
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了

错误:非模板的模板定义 std::unordered_map<int, std::basic_string<char> > Base<ProductX<SYNC>, SYNC>::s_map

编译时

静态s_map初始化引发错误.有人能指出我做错了什么吗?

c++ templates generic-programming crtp

10
推荐指数
3
解决办法
1553
查看次数

标签 统计

c++ ×1

crtp ×1

generic-programming ×1

templates ×1