【发布时间】:2021-10-04 01:13:32
【问题描述】:
我已经编写了自己的数组模板类“CArray”,并希望将 { 1, 2, 3 } 之类的内容传递给它的一个构造函数,以便我可以创建一个数组类实例“CArray a ( {1,2, 3}, numElems );
但是,我找不到构造函数的正确语法。
template <class _T>
class CArray {
public:
_T* buffer;
int length;
CArray () : buffer (nullptr), length (0) {}
void Create (int l) {
buffer = new _T[length = l];
}
CArray (_T const* values, int numElems) {
Create (numElems);
memcpy (buffer, values, numElems * sizeof (_T));
}
};
CArray<int> a = CArray<int>( {1,2,3}, 3 );
这既不适用于 MSVC 19 最新版本,也不适用于 gcc 11.2。我将如何编写我的构造函数来完成这项工作?
是否有可能省略“numElems”参数并从编译器获取初始化器长度(元素计数)?
【问题讨论】:
-
CArray(std::initializer_list<T> init)(你不需要提供大小,std::initializer_list知道它的大小)。参见例如std::vector构造函数,重载 (10) here -
另外,
_T是保留名称(下划线后跟大写),不应在代码中使用。 -
我不知道 _T 被保留。我在模板类示例中看到过它(几年前),所以我使用了它。我将更改我的代码。谢谢提示。
标签: c++ constructor initializer-list