![](/img/trans.png)
[英]accessing operator overloading of class which is wrapped by std::shared_ptr
[英]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.