我有一个2-dim的const双矩阵,它需要作为参数传递给一个接受(非const)双**形参的函数。
[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 »
(在代码段的最后一段)取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)
不工作
一个相当难看的方法,至少不需要复制所有的数据,是创建一个行指针的临时数组,例如
void CEqParams::operator=(const CEqParams &right)
{
double * dm_params_ptrs[4] = { dm_params[0], dm_params[1], dm_params[2], dm_params[3] };
setEqParams(dm_params_ptrs);
}