你基本上被限制在(*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 集合实现了一个 at() 成员函数,它被选中,而不是未选中的 operator[]。如果您不介意边界检查的开销,或者您只是想成为非标准的,您可以实现 at() 然后调用myVertex.some2DTable->at(0,0)
,完全省去一些语法上的麻烦。