为自定义 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_ptr
是 smart 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);
我有自己的扩展二维数组 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_ptr
是 smart 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);