gpt4 book ai didi

c++ - 非模板错误的模板定义

转载 作者:可可西里 更新时间:2023-11-01 15:54:50 25 4
gpt4 key购买 nike

我想使用 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 引发错误初始化。有人可以指出我做错了什么吗?

最佳答案

您使用 Base<ProductX<SYNC>, SYNC>作为成员特化定义 s_map ,因此您实际上需要 Base 的相应偏特化(§14.5.5.3/1)。换句话说,您正在尝试定义一个不存在的偏特化的成员。

尝试提供该专业:

template<typename SYNC>
struct ProductX;

//-- CRTP base class with some sync/lock mechanism
template<typename T, typename SYNC>
struct Base {};
template<typename SYNC>
struct Base<ProductX<SYNC>, SYNC> {
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" }
};

Demo .

关于c++ - 非模板错误的模板定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31557194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com