vector += 1, 2, 4, 5;

cxjddd 2004-12-19 07:14:35
听说 boost 库现在可以这样了:
vector<int> v;
v += 1, 2, 4, 5;
所以想自己实现一下:

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;

template <typename T>
vector<T> &operator += (vector<T> &v, T t)
{
v.push_back (t);
return v;
}

template <typename T>
vector<T> &operator , (vector<T> &v, T t)
{
v.push_back (t);
return v;
}

int main()
{
vector<int> v;
v += 1, 2, 3, 4;
for (vector<int>::iterator i = v.begin(); i != v.end(); ++i)
cout << *i << endl;

system ("pause");
return 0;
}
...全文
239 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
北极猩猩 2005-01-05
  • 打赏
  • 举报
回复
这种重载倒是可以,关键是要经得住时间的考验,因为很多副作用是不会很快找出来的,需要一段时间。
cxjddd 2004-12-22
  • 打赏
  • 举报
回复
如果这些重载本身就设计成一个相对独立的用法,我觉得重载 operator, 并没什么问题。

不过,我在有一台机子的 VC6 上,一重载 operator, 就编译不了……
yjh1982 2004-12-22
  • 打赏
  • 举报
回复
spirit也重载了operator,@_@
pacman2000 2004-12-22
  • 打赏
  • 举报
回复
得想办法让operator,适应各种情况啊。 不然会造成意义混乱的。。。 返回代理也难做,因为涉及左值右值的问题。
happytoy 2004-12-21
  • 打赏
  • 举报
回复
厉害,佩服。通常大家使用最多的重载就是“+=、-=、>>、<<”等等运算符,很少人会重载逗号运算符的,不过其实我们不正需要这样多多地尝试才能有更多地了解C++及其应用吗?
beyondtkl 2004-12-21
  • 打赏
  • 举报
回复
哦 我也沒用過boost庫 gz...
darkstar21cn 2004-12-21
  • 打赏
  • 举报
回复
没用过boost库,了解不多。
楼主的想法还是不错。
icansaymyabc 2004-12-21
  • 打赏
  • 举报
回复
高手就是不断探索中产生的,佩服搂主的开拓精神。
zhengwei1984222 2004-12-21
  • 打赏
  • 举报
回复
晕,operator ,

第一次看见
cxjddd 2004-12-20
  • 打赏
  • 举报
回复
不管怎样,boost 似乎就是这样做的。
一个更稳妥的办法是为 operator += 返回一个代理类,用这个代理类来重载 operator, 这个运算符。

template <typename T>
class tmp_vector
{
vector<T> &v;
public:
tmp_vector(vector<T>& vv) : v(vv) {}
friend tmp_vector& operator, (tmp_vector&, T);
};
template <typename T>
tmp_vector<T>& operator, (tmp_vector<T>& v, T t)
{
v.v.push_back(t);
return v;
}
template <typename T>
tmp_vector<T>& operator+= (vector<T>& v, T t)
{
v.push_back(t);
return tmp_vector<T>(v);
}
lu1172101275 2004-12-20
  • 打赏
  • 举报
回复
楼主的重载确实不错
mahatma_cn 2004-12-20
  • 打赏
  • 举报
回复
其实不应该改变","操作符的语义。让人看不懂!
v += 1, 2, 4, 5;
这个语句在c++中和v+=5没有区别的。
intellifox 2004-12-19
  • 打赏
  • 举报
回复
感觉不好,最好不用这种方法写代码,谁看的懂啊。重载的连“,”都不放过
sharkhuang 2004-12-19
  • 打赏
  • 举报
回复
感觉不怎么通用
Leaveye 2004-12-19
  • 打赏
  • 举报
回复
难以想象,那 -= 怎么办呢?
avalonBBS 2004-12-19
  • 打赏
  • 举报
回复
@_@ 顶一下

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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