有一个函数,接受二维数组:
void foo ( double ** p )
{ /*writing some data into p*/ }
我不想将原始二维数组传递给这个函数,因为我不想管理内存调用new
和delete
. 另外我不想将函数签名更改为void foo ( std::vector< std::vector<double> >& )
. 而且我不能foo
作为模板函数(在我的项目中它是一个 COM 接口方法)。
我想传递一些 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,二维数组的大小是已知的。