有一個功能,接受2D陣列:傳遞RAII結構爲2D陣列成一個函數
void foo (double ** p)
{ /*writing some data into p*/ }
我不希望原始2D陣列傳遞到該功能,因爲我不想管理內存調用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,2D陣列的大小是已知的。
謝謝,至少我的編譯器沒有錯誤地處理它!我想知道,能否確定在''foo''中使用地址算術? – fogbit 2012-08-17 12:29:52
@fogbit是的,這應該沒問題 – 2012-08-17 12:59:24