【发布时间】:2020-09-11 05:28:42
【问题描述】:
所以我有以下代码:
#include <map>
#include <iostream>
using namespace std;
template<class V, unsigned D>
class SparseArray
{
public:
map<string,V> data;
SparseArray(){}
class Index
{
private:
int dims[D]{};
public:
int& operator[](int index)
{
return dims[index];
}
const int& operator[](int index) const
{
return dims[index];
}
friend ostream& operator<<(ostream& os, const SparseArray<V,D>::Index& index)
{
os << '{';
for(int i=0;i<D;i++)
{
os<<index.dims[i];
if(i+1!=D)os<<',';
}
os << '}';
return os;
}
Index operator,(Index index)
{
}
Index(){for(int i=0;i<D;i++){dims[i]=0;}}
};
};
int main()
{
SparseArray<int,3>::Index i;
i[0] = 1;
i[1] = 2;
i[2] = 7;
//i = 1,2,7; - that's what i'm trying to make work
cout<<i;
}
如何实现逗号运算符,以便i=1,2,7 与i[0] = 1; i[1] = 2; i[2] = 7; 执行完全相同的操作
到目前为止我所知道的是 i=1,2,7 相当于 i.operator=(1).operator,(2).operator,(7); ,我该如何使用它?
我从研究中知道重载逗号运算符是不寻常的,但我需要这样做,因为它符合项目的要求。
【问题讨论】:
-
在您的情况下,最好使用初始化列表进行复制分配。然后你可以写
i = {1, 2, 3}; -
矩阵类的设计看起来很奇怪。为什么矩阵类本身没有
operator[](和operator,)函数?Index类的目的是什么? -
很遗憾,我对此没有发言权,作业必须完全按照这种风格进行
i =1,2,7; -
@Someprogrammerdude 这是一个稀疏数组项目的开始,许多功能还没有出现,现在我正在尝试让
Index类工作 -
@ArdentCoder 是的,
i=1,2,7应该为底层的i.dims数组赋值
标签: c++ operator-overloading comma-operator