gpt4 book ai didi

c++ - 为 2D vector 重载 << 和 [][]

转载 作者:行者123 更新时间:2023-11-28 07:38:47 25 4
gpt4 key购买 nike

我怎样才能重载以制作ob2[0][0] << 112.6工作?目前我正在为此操作使用插入功能。

template <class X>
class A
{
void insert(int row, int col, type val)
{
...
}
};

template <class Y>
class B
{
vector<int> row;
vector<vector<pair<int, Y> > > colval;
}

int main()
{
B<float> ob1;
A<B<float> > ob2;
ob2[0][0] << 112.6;
}

最佳答案

使用代理对象:

class A
{
// provide operator << for a single row/column
struct cell_proxy
{
void operator<<(float value) const
{
target->insert(row, col, value);
}

A* target;
size_t row;
size_t col;
};

// provide access to elements of a single row
struct row_proxy
{
cell_proxy operator[](size_t col)
{
cell_proxy res = {target, row, col};
return res;
}

A* target;
size_t row;
};

row_proxy operator[](size_t row)
{
row_proxy res = {this, row};
return res;
}
};

也就是说,您可以随心所欲地使用运算符重载、代理和模板,但您也可以使代码不可读和不可调试。我个人认为 insert() 调用更具可读性。

关于c++ - 为 2D vector 重载 << 和 [][],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16246348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com