![](/img/trans.png)
[英]How to overload the assignment operator for a class that inherits from a template in c++
[英]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.