使用std :: map的类头中的C ++模板属性 - 编译器错误C1001

时间:2013-05-20 12:02:31

标签: c++ templates compiler-errors stdmap

我对C ++很新,所以我不确定我做错了什么。

这是我的构造:

STRUCT

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。

那有什么不对吗?

2 个答案:

答案 0 :(得分:3)

变量无法模板化,必须完全指定。因此,要声明pointers变量,您必须指定N

答案 1 :(得分:1)

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

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

只是一个非常简单的例子,您应该将指针设为私有,并添加一些访问函数以获得一个不错的界面。