あなたは基本的にに限定されてい(*sampleVertex.some2DTable)(0,0)
ます。もちろん、再装着する必要がない場合は、代わりに実際の値をマトリックスに格納してみませんか?
または、ポインターを非公開にし、アクセサーを作成します (注: 次の例では、EntryTypes のマトリックスを想定しています)。
Matrix& Vertex::GetTableRef()
{
return *some2DTable;
}
// or
Matrix::EntryType& Vertex::GetTableEntry(int row, int col)
{
return (*some2DTable)(row,col);
}
// way later...
myVertex.GetTableRef()(0,0) = 0;
// or...
myVertex.GetTableEntry(0,0) = 0;
または、クラス Vertex を変更できない場合は、インライン関数を定義してこれを行います。
// in some header file
inline Matrix& GetTableRef(Vertex& v)
{
return *v.some2DTable;
}
// or you could do this
inline Matrix::EntryType& GetTableEntry(Vertex& v, int row, int col)
{
return (*v.some2DTable)(row, col);
}
// later...
GetTableRef(myVertex)(0, 0) = 0;
// or
GetTableEntry(myVertex, 0, 0) = 0;
最後に、演算子のオーバーロードを使用する必要がないことを忘れないでください。STL コレクションは、チェックされていない operator[] とは対照的に、チェックされている at() メンバー関数を実装します。境界チェックのオーバーヘッドを気にしない場合、または非標準にしたい場合は、 at() を実装してから を呼び出すだけmyVertex.some2DTable->at(0,0)
で、構文上の頭痛の種を少し節約できます。