【发布时间】:2019-09-09 16:30:14
【问题描述】:
我想要一个数据类型,它有一定数量的模板化额外信息,但额外信息可能不存在。
我的第一个想法就是这样做:
template <size_t SIZE>
class Data
{
int a;
int bs[SIZE];
public:
Data(int a, int bs[SIZE]) : a(a), bs(bs) {};
};
但是在阅读了其他关于零大小数组的问题之后,如果我用SIZE = 0 实例化模板,这似乎会导致麻烦,在这种情况下,如果我尝试调用带有Data<0> d(1, {});的构造函数
一个明显的解决方案是为这种情况创建一个额外的类型:
class DataZero
{
int a;
public:
Data(int a) : a(a) {};
};
但我非常希望有一个解决方案,它可以让我将模板保存在任何地方,如果可能的话,我可以写Data<0>。另外,也许我只是实例化了Data<0> 错误,但非常感谢您对此事的任何意见。
【问题讨论】:
-
allow me to write Data<0>- 这会做什么? -
如果可以将其模板化,则不必引入新类型
DataZero。 -
std::array<int, SIZE> bs;? -
Data(int a, int bs[SIZE]) : a(a), bs(bs) {}无效,c-array 不可复制,(而int bs[SIZE]实际上是int* bs,您可能需要Data(int a, int (&bs)[SIZE])代替(并使用std::copy进行初始化))。 -
如果我使用您在下面建议的解决方案,
std::array会使用我的语法正确复制吗?
标签: c++ arrays templates types