【发布时间】:2011-09-22 10:49:47
【问题描述】:
我有一个 2-dim const double 矩阵,它需要作为参数传递给采用(非 const)double** 参数的函数。
[CEqParams.h] // < given as is - can't do a thing about it
class CEqParams
{
public:
void operator=(const CEqParams &right);
...
double dm_params[4][8];
};
.
[some_functions.h] // < dto.
...
void setEqParams(double **m);
...
.
[CEqParams.cpp]
void CEqParams::operator=(const CEqParams &right)
{
setEqParams( « magic here » );
}
其中« magic here »(在代码 sn-ps 的最后一段)应采用 right.dm_params(或其内容的适当表示)。
除了手动将right.dm_params 转移到辅助double** 结构(通过在所有数组字段上运行并逐个复制它们的嵌套循环)然后将后者传递给setEqParams 之外,我还能在这里做吗? ?
PS:鉴于我能够将right.dm_params 传递给一个以double[][](或double[4][8]?)作为参数的函数 - 我将如何摆脱const? “提示”:const_cast<double[4][8]>(right.dm_parameters) 不起作用。
【问题讨论】:
-
为什么不使用隐式转换?
-
A
double**不是指向二维数组的指针。它是指向[数组中的第一个元素]指针的指针。 -
@onof:
T[][]与T**不相同。 -
坦率地说,这整个界面是愚蠢的。在现代 C++ 中没有任何理智的人会接受 T**。
-
@DeadMG:“some_functions.h”部分是一个将近 20 年前的 C 头文件 - 从那时起就没有更新过。 “CEqParams.h”部分是来自“some_functions.h”的低级例程的快速-n-dirty C++ 抽象——我不允许更改。所以:是的,它很丑。
标签: c++ pointers multidimensional-array argument-passing