在编译时推导二维数组的一维
Deduce one dimension of 2D array at compile time
我有以下功能:
template <int size>
double** writeArray(double input[size][2]) {
double** Points = new double*[size];
for (int i = 0; i < size; ++i) {
Points[i] = new double[2];
}
for (int i = 0; i < size; ++i) {
Points[i][0] = input[i][0];
Points[i][1] = input[i][1];
}
return Points;
}
从 double[size][2]
数组写入动态分配的 double **
指针。
有什么方法可以自动推断出 size
,这样我就可以像这样使用它了:
double** Points = writeArray(Test1);
而不是:
double** Points = writeArray<2>(Test1);
你应该像这样通过引用传递数组:
template <int size>
double** writeArray(const double (&input)[size][2])
是的!实际上,您可以在 compile-time 处推导出 个维度。这个想法是编写一个模板函数,该函数将数组 by reference 作为其参数。这可以防止 C++ 将数组类型衰减为指针类型,从而导致它丢失数组大小。这是一个例子:
template <typename T, size_t M, size_t N>
void howBigAmI(T (&array)[M][N]) {
std::cout << "You are " << M << " x " << N << " in size." << std::endl;
}
如果您愿意,您应该能够对其进行调整以满足您的需要。
我有以下功能:
template <int size>
double** writeArray(double input[size][2]) {
double** Points = new double*[size];
for (int i = 0; i < size; ++i) {
Points[i] = new double[2];
}
for (int i = 0; i < size; ++i) {
Points[i][0] = input[i][0];
Points[i][1] = input[i][1];
}
return Points;
}
从 double[size][2]
数组写入动态分配的 double **
指针。
有什么方法可以自动推断出 size
,这样我就可以像这样使用它了:
double** Points = writeArray(Test1);
而不是:
double** Points = writeArray<2>(Test1);
你应该像这样通过引用传递数组:
template <int size>
double** writeArray(const double (&input)[size][2])
是的!实际上,您可以在 compile-time 处推导出 个维度。这个想法是编写一个模板函数,该函数将数组 by reference 作为其参数。这可以防止 C++ 将数组类型衰减为指针类型,从而导致它丢失数组大小。这是一个例子:
template <typename T, size_t M, size_t N>
void howBigAmI(T (&array)[M][N]) {
std::cout << "You are " << M << " x " << N << " in size." << std::endl;
}
如果您愿意,您应该能够对其进行调整以满足您的需要。