C++类有可能实现 class[i,j ]=value;这种运算的重载吗

绿色盒子 2020-01-11 11:53:20
C++类有可能实现

class a;
double value;
a[i,j ]=value

这种运算的重载吗
...全文
527 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
绿色盒子 2020-01-13
  • 打赏
  • 举报
回复
C++不允许自定义类型的符号,要是能自定义就好了
真相重于对错 2020-01-13
  • 打赏
  • 举报
回复
引用 13 楼 Mr_sandman1994 的回复:
[quote=引用 7 楼 真相重于对错 的回复:] 我的代码还可以这样 M[{1,2,30}]=5;
对于2010不支持咋办[/quote] vs2010是10年前的产品,不完全支持c11
绿色盒子 2020-01-13
  • 打赏
  • 举报
回复
引用 7 楼 真相重于对错 的回复:
我的代码还可以这样
M[{1,2,30}]=5;

对于2010不支持咋办
真相重于对错 2020-01-11
  • 打赏
  • 举报
回复
class Mydata {
public:
	Mydata& operator[](initializer_list<int> l)
	{
		for (auto i = l.begin(); i != l.end(); ++i)
		{
			idx.push_back(*i);
		}
		return *this;
	}
	Mydata& operator=(int v)
	{
		if (idx.empty() != true) {
			for (auto i = idx.begin(); i != idx.end();++i) {
				d.resize((*i > d.size()) ? *i:d.size());
				d[*i - 1] = v;

			}
		}
		return *this;
	}
	vector<int> idx;
	vector<int> d;
};
int main()
{
	Mydata m;
	m[{1, 2}] = 5;
	return 0;
}
绿色盒子 2020-01-11
  • 打赏
  • 举报
回复
引用 1 楼 真相重于对错 的回复:
c++11 可以,了解一下, initializer_list

这个不行吧
我的问题意思是[i,j]是索引,然后后面还有赋值
真相重于对错 2020-01-11
  • 打赏
  • 举报
回复
c++11 可以,了解一下, initializer_list
真相重于对错 2020-01-11
  • 打赏
  • 举报
回复
{}与() 差别大吗?
寻开心 2020-01-11
  • 打赏
  • 举报
回复
是啊。
【】这个操作符,只允许有一个参数,所以楼主那个想法不行呢。



本来想试试tuple元组来着, 不支持无名的, 也没戏
要是支持就可以 a[(a,b)] =d了;
真相重于对错 2020-01-11
  • 打赏
  • 举报
回复
operator[] 本来就只允许一个参数,不能用[1,2] 多打两个字符{},何乐而不为呢?
寻开心 2020-01-11
  • 打赏
  • 举报
回复
升级成 M【1,3】=5; 来看看。
真相重于对错 2020-01-11
  • 打赏
  • 举报
回复
我的代码还可以这样 M[{1,2,30}]=5;
真相重于对错 2020-01-11
  • 打赏
  • 举报
回复
operator[] 就是一个函数啊?
寻开心 2020-01-11
  • 打赏
  • 举报
回复
如果就楼主那个问题, 还不如重新定义一个函数呢

doube& A::f(int i, int j); 这种呢。 a.f(i,j) = d;
寻开心 2020-01-11
  • 打赏
  • 举报
回复
我觉得不行
逗号在[a,b]这种表达式里面会被当做逗号运算符来对待的

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧