Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 具有不同非类型模板参数的模板类部分专门化_C++_Templates - Fatal编程技术网

C++ 具有不同非类型模板参数的模板类部分专门化

C++ 具有不同非类型模板参数的模板类部分专门化,c++,templates,C++,Templates,是否可以使用不同的非类型模板参数值“部分专门化”模板类? 更具体地说,我尝试根据不同的非类型模板参数将std::vector和std::array的使用组合到一个类中,如下所示: template<typename T, int Size> //if Size given, use std::array stuff class MyArray:public std::array<T, Size> {...} template<typename T> //i

是否可以使用不同的非类型模板参数值“部分专门化”模板类? 更具体地说,我尝试根据不同的非类型模板参数将std::vector和std::array的使用组合到一个类中,如下所示:

template<typename T, int Size>  //if Size given, use std::array stuff
class MyArray:public std::array<T, Size> {...}

template<typename T> //if Size is not given, use std::vector stuff
class MyArray:public std::vector<T> {...}
template//如果给定了大小,请使用std::array stuff
类MyArray:public std::array{…}
模板//如果未给出大小,请使用std::vector stuff
类MyArray:public std::vector{…}

但第二个模板将是重新定义的模板错误。我尝试使用std::enable_if,但不知道如何在此处正确使用它。

您可以使用sentinel值:

template<typename T, int Size = -1>  //if Size given, use std::array stuff
class MyArray:public std::array<T, Size> {};

template<typename T> //if Size is not given, use std::vector stuff
class MyArray<T, -1>:public std::vector<T> {};
template//如果给定了大小,请使用std::array stuff
类MyArray:public std::array{};
模板//如果未给出大小,请使用std::vector stuff
类MyArray:public std::vector{};

演示:

您可以使用sentinel值:

template<typename T, int Size = -1>  //if Size given, use std::array stuff
class MyArray:public std::array<T, Size> {};

template<typename T> //if Size is not given, use std::vector stuff
class MyArray<T, -1>:public std::vector<T> {};
template//如果给定了大小,请使用std::array stuff
类MyArray:public std::array{};
模板//如果未给出大小,请使用std::vector stuff
类MyArray:public std::vector{};

演示:

你认为0的大小是有效的大小吗?您是否打算从
std::array
派生模板?@SamVarshavchik您发现了问题。不,我没有。所以我想知道如何摆脱这种情况?@ SZ:你可以在第一个类定义中添加一个<代码> StistaSytStuts<代码>,以确保大小是你认为可以接受的值。我的方向与接受的答案相同。我正在考虑关于<代码>大小<代码> 0。你认为0的大小是有效的吗?尺寸?您是否打算从
std::array
派生模板?@SamVarshavchik您发现了问题。不,我没有。所以我想知道如何摆脱这种情况?@ SZ:你可以在第一个类定义中添加一个<代码> StistaSytStuts<代码>,以确保大小是你认为可以接受的值。我的方向与接受的答案相同。我正在考虑关于<代码>大小<代码> 0。给出<代码>大小<代码>默认值
-1
似乎很合适。@super:是的,我在你发表评论的同时修复了它。:)
std::array
的第二个参数的类型为
std::size\u t
。我建议将
int
替换为
std::size\u t
。请参阅声明。@Evg:同意,在编写此答案后,OP指定0不是其数组的有效元素数,因此我们确实可以使用size\u t和sentinel值0。为
size
提供
-1
的默认值似乎是合适的。@super:是的,我同时修复了您的评论。:)
std::array
的第二个参数的类型为
std::size\u t
。我建议将
int
替换为
std::size\u t
。请参阅声明。@Evg:同意,在写入此答案后,OP指定0不是其数组的有效元素数,因此我们确实可以使用size\u t和sentinel值0。