显式模板实例化问题
Problem with Explicit Template Instantiation
我无法使用显式模板实例化编译以下代码段。
我在这一行收到一个错误:
std::map<uint8_t, std::string> DW_enumDescription::descMap = std::map<uint8_t, std::string>
使用叮当声,错误是:
错误:在"O::D ata::D W_enumDescription"中没有名为"descMap"的成员
使用 G++ 是:
错误:ISO C++不允许将"O::D ata::EnumDescription::d escMap">定义为"O::D ata::D W_enumDescription::d escMap" [-fpermissive]
在这里,我继续使用相同的命名空间Data
,即使在我的原始代码中,我也使用了两个单独的命名空间;但是即使进行了这种简化,我也得到了相同的错误。
#include <cstdint>
#include <map>
#include <string>
namespace O
{
namespace Data
{
template<typename E /* enum to describe */
,typename T = uint8_t /* index type */
>
class EnumDescription
{
public:
/// Static map to store the descriptions
static std::map<T, std::string> descMap;
};
}
}
namespace O
{
namespace Data
{
enum struct DW : uint8_t
{
DW_Unknown = 0,
DW_TS_1 = 1,
DW_TS_2 = 2,
DW_DS_1 = 3,
DW_Dev = 4,
enumSize = 5
};
class DW_enumDescription : public Data::EnumDescription<DW, uint8_t> {};
}
}
// ===================== Explicit Template Instantiation ======================
namespace O
{
template class Data::EnumDescription<Data::DW, uint8_t>;
}
// ============================================================================
namespace O
{
namespace Data
{
std::map<uint8_t, std::string> DW_enumDescription::descMap = std::map<uint8_t, std::string> // ERROR
{
{ static_cast<uint8_t>(DW::DW_Unknown), "Unknown" },
{ static_cast<uint8_t>(DW::DW_TS_1), "DW_TS_1" },
{ static_cast<uint8_t>(DW::DW_TS_2), "DW_TS_2" },
{ static_cast<uint8_t>(DW::DW_DS_1), "DW_DS_1" },
{ static_cast<uint8_t>(DW::DW_Dev), "DW_Dev" },
};
}
}
descMap
是EnumDescription<DW, uint8_t>
的成员,因此,修复:
namespace O
{
namespace Data
{
template<> std::map<uint8_t, std::string> EnumDescription<DW, uint8_t>::descMap =
{
{ static_cast<uint8_t>(DW::DW_Unknown), "Unknown" },
{ static_cast<uint8_t>(DW::DW_TS_1), "DW_TS_1" },
{ static_cast<uint8_t>(DW::DW_TS_2), "DW_TS_2" },
{ static_cast<uint8_t>(DW::DW_DS_1), "DW_DS_1" },
{ static_cast<uint8_t>(DW::DW_Dev), "DW_Dev" },
};
}
}
相关文章:
- 从C++实例化QML
- 错误 C2280 / 在 std::vector 中实例化对象时复制构造函数出现问题?
- 显式模板实例化问题
- 实例化函数模板的编译问题
- 模板函数实例化的可移植性问题
- 模板函数实例化 自定义数据类型的问题
- 字符串实例化问题
- 在 C++ 中实例化指向新对象的指针时出现问题
- 何时会隐式实例化导致问题
- Cygwin gcc编译器使用GAlib的模板实例化问题
- 复杂数据类型的模板实例化问题
- 类和函数模板实例化的Visual Studio dll导出问题
- c++中的工厂模式.实例化问题
- Qt继承和实例化问题
- c++中多态性基类和继承类实例化的问题
- 在实例化结构模板时出现问题
- 实例化模板化类的问题
- 实例化子类的多态性问题
- 对以下用户定义类片段中的模板实例化问题表示怀疑
- 继承——实例化问题