我想将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初始化引发错误.有人能指出我做错了什么吗?