如何在C++中返回二维数组
How to return two-dimensional arrays in C++
我正在尝试为我之前制作的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++中传递数组可以通过将指针传递到其第一个元素来实现,指针是按值传递的。
按值传递数组的唯一方法是封装它在结构中,但在大多数情况下,最好传递一个指针,然后按值复制所有数据。
只需返回一个指向数组第一个元素的指针!:)
相关文章:
- 从 c++ xll 返回二维数组以 excel,返回
- 以C++返回二维数组
- 在没有矢量的C 中返回二维数组
- 如何在函数中将二维数组作为参数传递,并在 C++ 中返回二维数组
- 接受来自函数的二维数组(int 类型)并将其返回到主函数
- 如何制作返回C 中二维数组的函数
- 使用二维数组调用返回结构
- 如何设置二维数组一个二维返回
- 从函数返回指向二维数组的指针
- 从类中返回只读二维数组
- 如何在C++中返回二维数组
- 将动态二维数组的返回指针传递给子函数并对该数组进行寻址
- 从C++中的开关情况返回二维数组
- 从函数返回一个二维数组
- c++函数创建一个二维数组并返回一个指向该二维数组的指针
- 如何声明二维数组的对象和返回它从一个函数
- 如何返回一个二维数组,其中一个维度是未知的大小
- 我如何在函数中返回一个二维数组
- 一维和二维数组中不需要的值更改,从 C++ 代码中的函数返回值
- 如何在c++中发送一个二维数组作为引用,并返回