非类型参数的模板参数必须是表达式

Dea*_*ean 4 c++ templates

为什么下面的代码是错误的?

template <typename T, int N>
struct Vector {
    T data[N];
};

struct Dynamic {
};

template <typename T>
struct Vector<T, Dynamic> {
    T* data;
};
Run Code Online (Sandbox Code Playgroud)

我试图用Vector<int, Dynamic> obj;它来实例化代码,但没有用

错误:非类型模板参数的模板参数必须是表达式

为什么?我正在传递一个类型,我认为这是一个有效的模板专业化。

我如何使用两个模板,其中一个请求 N,另一个不请求标记为Dynamic

Whi*_*TiM 5

template <typename T, int N>
struct Vector {
    T data[N];
};
Run Code Online (Sandbox Code Playgroud)

在这里,在主模板类,T必须是一个类型,(int, short, class-type, etc)......N是一种非类型,并且必须是一个表达式,其值的int类型(数字)。

struct Dynamic {
};

template <typename T>
struct Vector<T, Dynamic> {
    T* data;
};
Run Code Online (Sandbox Code Playgroud)

Dynamic是一种类型。不是int您的主模板中指定的


根据您的主要模板类,您只能Vector使用int. 例如。

template <typename T>
struct Vector<T, 1> {
    T* data;
};

template <typename T>
struct Vector<T, 35> {
    T* data;
};

template <typename T>
struct Vector<T, constExpressionThatReturnsAnInt> {
    T* data;
};

...etc
Run Code Online (Sandbox Code Playgroud)