如何在C++中返回二维数组

How to return two-dimensional arrays in C++

本文关键字:返回 二维数组 C++      更新时间:2023-10-16

我正在尝试为我之前制作的3D引擎端口实现Matrixx4x4类。以下是我目前在头文件中的内容:

#ifndef MAT4_H
#define MAT4_H
class Matrix4
{
public:
   Matrix4() {}
   float[4][4] getMatrix() { return m; }
   //...
   //other matrix related methods are omitted
   //...
private:
   float m[4][4]; 
};
#endif

但是应该返回二维数组的方法导致了这个错误:

src/Matrix4.h:13:10: error: expected unqualified-id before '[' token
    float[4][4] getMatrix() { return m; }
         ^

如果这个问题已经有了答案,我很抱歉,但我在这个网站上找到的答案通常是关于返回指针而不是数组。希望你能帮忙,谢谢。

我建议使用std::array。但是直接在代码中使用它,作为多数组,有点难看。所以我建议使用一个别名,定义为:

#include <array> 
namespace details 
{    
   template<typename T, std::size_t D, std::size_t ... Ds> 
   struct make_multi_array 
    : make_multi_array<typename make_multi_array<T,Ds...>::type, D> {}; 
   template<typename T, std::size_t D>
   struct make_multi_array<T,D> { using type = std::array<T, D>;  };
}
template<typename T, std::size_t D, std::size_t  ... Ds> 
using multi_array = typename details::make_multi_array<T,D,Ds...>::type;

然后将其用作:

public:
   multi_array<float,4,4> getMatrix() { return m; }
private:
   multi_array<float,4,4> m;

您也可以在其他地方使用别名,例如:

 //same as std::array<int,10> 
 //similar to int x[10] 
 multi_array<int,10>   x;   
 //same as std::array<std::array<int,20>,10>
 //similar to int y[10][20] 
 multi_array<int,10,20> y;   
 //same as std::array<std::array<std::array<int,30>,20>,10>
 //similar to int z[10][20][30]
 multi_array<int,10,20,30> z; 

希望能有所帮助。

在C或C++中传递数组可以通过将指针传递到其第一个元素来实现,指针是按值传递的。

按值传递数组的唯一方法是封装它在结构中,但在大多数情况下,最好传递一个指针,然后按值复制所有数据。

只需返回一个指向数组第一个元素的指针!:)