[英]Two operators simultaneity overload in c++
我想像數組一樣表示我的對象。 我的意思是程序員可以寫他的代碼
myobject[3]=2
在后面(在myobject代碼中)根本沒有數組,它只是表示。
所以我需要同時重載[]
和=
。 如何才能做到這一點?
謝謝,抱歉我的英語不好。
operator[]
應該返回對您要修改的對象的引用。 它可能是某種元對象,它會使operator=
重載以對主對象執行任何operator=
。
編輯 :作為OP澄清的問題, 是有辦法做到這一點。 看這里:
#include <vector>
#include <iostream>
int & func(std::vector<int> & a)
{
return a[3];
}
int main()
{
std::vector<int> a;
a.push_back(1);
a.push_back(2);
a.push_back(3);
a.push_back(4);
func(a) = 111;
std::cout << a[3] << std::endl;
}
所以我需要重載[]和=同時性。 怎么可以做到的?
它無法完成。 你可以做的是覆蓋operator[]
來返回'代理引用'。 也就是說,一個對象知道應用它的對象'myobject'並且索引使用'3',並且為映射類型(我按下int
)以及賦值運算符提供適當的轉換運算符。 標准庫本身有一些代理引用的例子。 有些東西:
class proxy
{
public:
proxy( object& object, int index ) : _object( object ), _index( index ) {}
operator int() const { return _object.implementation.value_at( index ); }
proxy operator=( int value ){ _object.implementation.value_at( index, value ); return *this; }
private:
object& _object;
int _index;
};
@yoni:可以給出向量的任何成員的地址(只要它存在)。 這是它的完成方式。
int& MyObject::operator[](size_t index)
{
return mVector[index];
}
const int& MyObject::operator[](size_t index) const
{
return mVector[index];
}
這是可能的,因為std :: vector保證將元素存儲在連續的數組中。 std :: vector的operator []返回它存儲的值的引用類型。 通過重載operator [],您只需要將該引用傳遞給operator []函數。
注意:std :: vector將負責邊界檢查。 使用@Griwes提供的解決方案,沒有邊界檢查。
編輯:似乎Griwes編輯了他的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.