簡體   English   中英

為自定義類std :: shared_ptr實例調用Operator()

[英]Call Operator() for custom class std::shared_ptr instance

我有自己的擴展2D數組類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智能指針 ,其行為類似於原始指針,您不能像這樣直接在指針上調用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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM