簡體   English   中英

如何在 C++ 中的模板 class 中為 mpf_t 數組重載 [] 運算符?

[英]How to overload [] operator for mpf_t array in a template class in C++?

我正在嘗試在 C++ 中開發一個自定義class ,它將包含一個mpfr_t數組。
問題是,我不知道如何重載[]運算符來訪問數組元素。
請參閱下面的代碼:

template <const unsigned int N>
class MyClass<mpfr_t, N> {
 private:
    mpfr_t array[N];
 public:
    mpfr_t& operator[] (const unsigned int i) const {
        assert(0 <= i && i < N);
        return array[i];

上面代碼的問題是我不能使用const並返回一個引用; 因為這將允許潛在的價值修改。 在這種情況下通常做的是人們編寫[]的兩個版本:一個const class 實例返回一個值( non-const引用),另一個返回引用的非常量。 但是,我無法返回mpfr_t類型——庫設計根本不允許這樣做:

error: function cannot return array type 'mpfr_t' (aka '__mpfr_struct [1]')

我意識到問題源於將C專用代碼包裝到嚴格的C++運算符重載機制中,但我想知道是否有任何破解方法?

你可以通過返回一個常量引用來實現operator[]const版本,而不是一個非常量引用(就像你在當前版本中所做的那樣):

//-----vvvvvvv-----------------------------------vvvvv--
mpfr_t const & operator[] (const unsigned int i) const {
    assert(0 <= i && i < N);
    return array[i];
}

請注意,您仍然可以擁有非常量重載:

mpfr_t & operator[] (const unsigned int i) {
// ...

如果您的MyClass object 是const ,將選擇第一個重載。

暫無
暫無

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

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