使用std::map在类头中使用c++模板化属性-编译错误C1001

C++ templated property in class header using std::map - Compiler error C1001

本文关键字:属性 编译 C1001 错误 c++ map std 使用      更新时间:2023-10-16

我对c++相当陌生,所以我不确定我做错了什么。

这是我的结构:

结构

template<size_t N> struct Offsets 
{ 
    static const int length = N;
    DWORD offsets[N]; 
};

和属性:

template <size_t N>
std::map<std::string, std::map<DWORD, Offsets<N>>> pointers;

结果是

编译错误C1001。

那有什么不对吗?

变量不能被模板化,它们必须被完全指定。因此,要声明pointers变量,必须指定N

你不能在变量上使用模板。如果你想保持指针的灵活性,把它封装在模板类或结构中。

template< size_t N >
class PointerOffsetMap
{
...
public:
    std::map<std::string, std::map<DWORD, Offsets<N>>> pointers;
}

只是一个非常简单的例子,您可能应该将指针设为私有并添加一些访问函数以获得一个漂亮的接口