为自定义 class std::shared_ptr 实例调用 Operator()

Call Operator() for custom class std::shared_ptr instance

我有自己的扩展二维数组 class CustomDynamicArray 覆盖 std::vector 并允许通过重载 operator()

按索引处理其项目
CustomCell& CustomDynamicArray::operator()(size_t colIdx, size_t rowIdx)

直到我有了简单的 CustomDynamicArray 实例

CustomDynamicArray _field;

我可能会通过以下方式处理数组项:

_field(x, y) = cell;

const CustomCell& currentCell = _field(x, y);

但是因为我将我的变量覆盖到 std::shared_ptr 我有一个错误

std::shared_ptr<CustomDynamicArray> _fieldPtr;
_fieldPtr(x, y) = cell; // Error! C2064 term does not evaluate to a function taking 2 arguments
const CustomCell& currentCell = _fieldPtr(x, y); // Error! C2064    term does not evaluate to a function taking 2 arguments

我应该如何修复这个编译错误?

现在我只看到使用这种语法的方法:

(*_newCells)(x, y) = cell;

std::shared_ptrsmart pointer,它的行为类似于原始指针,您不能像那样直接在指针上调用 operator()。您可以取消对 std::shared_ptr 的引用,然后调用 operator().

(*_fieldPtr)(x, y) = cell;
const CustomCell& currentCell = (*_fieldPtr)(x, y);

或显式调用 operator()(以丑陋的方式)。

_fieldPtr->operator()(x, y) = cell;
const CustomCell& currentCell = _fieldPtr->operator()(x, y);

您必须先取消引用指针:

(*_fieldPtr)(x, y) = cell;
const CustomCell& currentCell = (*_fieldPtr)(x, y);