类数组,在operator []中的转换指针

时间:2016-08-05 02:08:14

标签: c++ arrays c++11 casting operator-overloading

在我的库中,我有一个数组类:

template < class Type >
class Array
{ 
Type* array_cData;
...
Type& operator[] (llint Index)
    {
        if (Index >= 0 && Index < array_iCount && Exist())
            return array_cData[Index];
    } 
};

这很好,但是如果我在堆栈中生成类,那么:

Array<NString>* space = new Array<NString>(strList->toArray());
checkup("NString split", (*space)[0] == "Hello" && (*space)[1] == "world");
//I must get the object pointed by space and after use the operator[]

所以我的问题是:我可以在array_cData中获取对象而不指定像这样指向的对象:

Array<NString>* space = new Array<NString>(strList->toArray());
checkup("NString split", space[0] == "Hello" && space[1] == "world");

提前致谢! :3

-Nobel3D

2 个答案:

答案 0 :(得分:0)

最简单的方法是将指针转换为引用

Array<NString>* spaceptr = new Array<NString>(strList->toArray());

Array<NString> &space=*spaceptr;

checkup("NString split", space[0] == "Hello" && space[1] == "world");

P.S。如果operator[]收到无效的索引值,您将获得一定数量的未定义行为,以及第二次帮助崩溃。

答案 1 :(得分:0)

惯用的方法是没有指针:

Array<NString> space{strList->toArray()};
checkup("NString split", space[0] == "Hello" && space[1] == "world");

使用指针,你必须以某种方式解除引用

Array<NString> spacePtr = // ...
spacePtr->operator[](0); // classical for non operator method
(*spacePtr)[0]; // classical for operator method
spacePtr[0][0]; // abuse of the fact that a[0] is *(a + 0)

 auto& spaceRef = *spacePtr;
 spaceRef[0];