簡體   English   中英

具有函數運算符的C ++數組類,用於賦值

[英]C++ array class with function operator for assignment

我想編寫自己的2d數組類。 我希望類能夠為這樣的元素分配一個值。

a(0,0) = 1

我知道這是有可能的,因為我可以使用blazeeigen的矩陣類來做到這一點。 我的第一個想法是重載函數operator () ,該函數已經很好地訪問元素了。 當我嘗試分配a a(0,2) = 0; 我收到編譯器錯誤。

lvalue required as left operand of assingment

我必須讓哪個運算符重載該分配也可以正常工作?

您需要使用此原型構建一個函數:

T& operator()(std::size_t, std::size_t);

其中T是您的元素類型。 此函數需要返回對數組中元素的引用 這允許您通過調用者中的引用來修改元素的值。

和上面一樣,您應該提供功能

const T& operator()(std::size_t, std::size_t) const;

用於只讀元素訪問。 我相當教條地堅持使用std::size_t進行索引。 實際上,您可能希望自己的typedef代表索引類型。

您需要提供兩個重載-一個const ,另一個不重載,返回一個引用。 例如:

template <typename TVal> class val {
  std::map<int, TVal> values;

public:
  // the distinction is between a const version ...
  TVal operator()(int key) const {
    auto found = values.find(key);
    if (found != values.end())
      return found->second;

    return TVal();
  }

  // ... and a non-const, returning a reference
  TVal& operator()(int key) {
   return values[key];
  }
};

然后可以按以下方式使用它:

val<int> v;
v(1) = 41;
v(1)++;
std::cout << v(1) << std::endl; // -> 42
std::cout << v(2) << std::endl; // -> 0

請發布編譯錯誤,以供其他人查看並准確解決。

話雖如此,我很確定這是因為您沒有從操作員那里返回參考。

暫無
暫無

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

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