我正在尝试为我的2d指针数组定义一个类型,这样我就可以减少代码中的混乱。我有三个指针,所以我认为它看起来很糟糕。 我设法使用typedef重构代码,但它更像是试验和错误。我想知道这实际意味着什么:
typedef SomeClass* (&grid8x8)[8][8];
为什么这个函数返回ok值:
grid8x8 SomeOtherClass::getGrid()
{
return grid;
}
在这种情况下,typedef的语法令我感到困惑。
答案 0 :(得分:2)
typedef
表示:grid8x8
是对指向SomeClass
的8x8指针数组的引用。
SomeOtherClass::getGrid
函数是,我想象一下,将引用返回给成员变量SomeOtherClass::grid
。
我会这样做:
typedef SomeClass* (grid8x8)[8][8];
const grid8x8& SomeOtherClass::getGrid()
{
return grid;
}
这样,您可以grid8x8
或grid8x8
引用。更多才多艺,你不太可能忘记你有时候不应该使用那个参考。
答案 1 :(得分:1)
这是一个C ++ 11答案(毕竟问题标记为C ++)
您可以使用std::array
来存储网格而不是C数组。根据您对模板的偏好,语法有点简单。
#include <array>
typedef std::array<std::array<SomeClass*, 8>, 8> grid8x8;
答案 2 :(得分:0)
它是指针((&)
)到整数([8][8]
)的8 x 8数组(*
)的引用(int
)。从右到左开始在最里面的括号内解析,然后再向右解析,最后再向左解析。相反,对指向8乘8的整数数组的指针的引用如下所示:
typedef int (*& RefToPtrToGrid)[2][2];
就个人而言,我发现c ++ 11风格更具可读性:
using RefTo8x8GridofPtr = int* (&) [8][8];
//or even better with std::array
using Grid8x8 = std::array<std::array<int*,8>,8>&;
//or, more flexible:
template<size_t M,size_t N>
using Grid = std::array<std::array<int*,N>,M>&; //usage: Grid<8,8> myGrid;
另外,正如@Will Briggs所说,你可能不想制作类型的参考部分:
using Grid8x8 = int* [8][8];
//... and so on