【发布时间】:2019-11-17 02:34:37
【问题描述】:
是否可以“部分专门化”具有不同非类型模板参数值的模板类? 更具体地说,我试图根据不同的非类型模板参数将 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> {...}
但第二个模板将是重新定义的模板错误。我尝试使用 std::enable_if,但不知道如何在这里正确使用它。
【问题讨论】:
-
您认为大小为 0 是有效大小吗?您是否打算让您的模板从
std::array<T, 0>派生? -
@SamVarshavchik 你发现了问题。不,我没有。所以我想知道如何摆脱这种情况?
-
@sz:您可以在第一类定义中添加
static_assert,以确保 Size 是您认为可以接受的值。 -
我正朝着与公认答案相同的方向前进——我正在考虑专注于
Sizeof 0。