我想將CRTP pattern與某些鎖定機制結合使用以在多線程環境中進行訪問同步。非模板錯誤的模板定義
我的代碼如下所示:
//-- 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" }
}
但是我得到
error: template definition of non-template
std::unordered_map<int, std::basic_string<char> > Base<ProductX<SYNC>, SYNC>::s_map
編譯時。
對靜態初始化s_map
引發錯誤。有人能指出我做錯了什麼嗎?
@Deduplicator - 這不是你標記的內容的重複。如果重複的東西,那麼這一個:http://stackoverflow.com/questions/13404695/c-how-to-initialize-static-variables-of-a-partial-template-specialization –