【发布时间】:2013-05-12 21:41:49
【问题描述】:
我想要一个数组的包装器,这样,它将存储在堆栈中 - 不关心内存释放 - 可以通过大括号列表进行初始化,并且可能可以替换为普通数组的任何位置。然后,我生成了以下代码。现在我想知道,我错过了什么。 -- 那么- 这是我想要的吗?
template<class T, size_t size>
struct Array
{
T body[size];
operator T* () { return body; }
};
编辑:
我可能不准确。包装仅用于建筑目的。当位于初始化列表中时(主要),它应用于从大括号列表构造数组。喜欢
class A {
protected: A(int array[])
...
class B : public A {
public: B() :
A( (Array<int, 2>) {{ 1, 2 }} )
...
有一个const 版本的强制转换运算符的提议。 - 我一直在考虑这个,但不确定是否真的需要。虽然转换为const T[]是通过现有的运算符隐式完成的,并且可以通过给T = const ...定义一个常量数组,还有原因吗?
【问题讨论】:
-
你刚刚描述了
std::array -
你的类还应该提供
operator[N]的const/non-const重载。 -
@0x499602D2
[]应该已经通过转换为指针来处理,但是关于该转换运算符的附加const版本的好点。