有一个函数,接受二维数组:
void foo ( double ** p )
{ /*writing some data into p*/ }
我不想将原始二维数组传递给此函数,因为我不想管理内存调用 new
和 delete
.我也不想将函数签名更改为 void foo ( std::vector< std::vector<double> >& )
.我做不到 foo
作为模板函数(在我的项目中它是一个 COM 接口(interface)方法)。
我想传递一些 RAII 对象对其进行原始装饰,例如
void foo ( double * p ){}
std::vectore<double> v(10);
p( &v[0] );
有没有办法对二维数组执行此操作?我试过了
std::vector< std::vector<int> > v;
foo( &v[0][0] )
和
std::vector< std::tr1::shared_ptr<int> > v;
但我遇到编译错误 error C2664 - cannot convert parameter
.
另外,在这种情况下,可以确定函数内部的原始地址算法工作正常吗?
没有 C++11,二维数组的大小是已知的。
最佳答案
一个可能的解决方案是改变:
std::vector< std::vector<int> > v;
foo( &v[0][0] )
到
std::vector< std::vector<int> > v;
std::vector<int*> v_ptr;
for (...) {
v_ptr[i] = &v[i][0];
}
foo( &v_ptr[0])
关于c++ - 将 RAII 结构作为二维数组传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12005643/