为什么下面的代码是错误的?
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?
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)
| 归档时间: |
|
| 查看次数: |
7060 次 |
| 最近记录: |