【发布时间】:2011-10-07 09:55:13
【问题描述】:
我创建了一个列表类,作为替换程序中可变参数函数的一种方法,用于初始化需要包含不断变化的元素列表的对象。 list 类有一个我非常喜欢的用法语法。但是我以前没有见过它使用过,所以我想知道我是否应该仅仅因为这个事实而使用它?列表类的基本实现如下所示...
#include <list>
#include <iostream>
template<typename T>
struct list
{
std::list<T> items;
list(const list&ref):items(ref.items){}
list(){}
list(T var){items.push_back(var);}
list& operator,(list add_){
items.insert(items.end(),add_.items.begin(), add_.items.end());
return *this;
}
list& operator=(list add_){
items.clear();
items.insert(items.end(),add_.items.begin(), add_.items.end());
return *this;
}
list& operator+=(list add_){
items.insert(items.end(),add_.items.begin(), add_.items.end());
return *this;
}
};
这让我可以像这样在代码中使用它...
struct music{
//...
};
struct music_playlist{
list<music> queue;
//...
};
int main (int argc, const char * argv[])
{
music_playlist playlist;
music song1;
music song2;
music song3;
music song4;
playlist.queue = song1,song2; // The queue now contains song1 and song2
playlist.queue+= song1,song3,song4; //The queue now contains two song1s and song2-4
playlist.queue = song2; //the queue now only contains song2
return 0;
}
我真的认为语法比我刚刚公开一个常规的 stl 容器要好得多,甚至比可变参数函数更好(和类型安全)。但是,由于我没有看到使用这种语法,我很好奇是否应该避免它,因为首先代码应该很容易被其他程序员理解?
编辑:
结合这个问题,我发布了这个question,更针对实际问题的解决方案。
【问题讨论】:
-
,在高尔夫中被大量使用,这表明它通常是一种不好的做法。在这种情况下,它在大多数情况下看起来更具可读性。也许避免使用 , with = ?每个人都应该清楚 += 发生了什么,即使他们不知道 , 做了什么。使用 = 就不太直观了。
-
如果您使用
+=,为什么不使用+? (老实说,我一直讨厌+的这种用法,因为它不是可交换的……但这就是std::string所做的,而且您已经通过+=这样做了,所以为什么不保持一致呢?) -
你的赋值运算符比你的逗号运算符差很多。
-
这只是我在 5 分钟内想出的一个简单示例。如果我要在实际代码中使用它,我会添加更多功能、错误检查,并将其包含在我的库的命名空间中,以及其他一些东西。
-
我只是拿一个代码 sn-p 给你团队中最年轻的两个人看,让他们在操作员附近修复一些重要的东西,除了代码之外没有任何解释。如果他们必须来找你问一个问题或花费过多的时间,这意味着你正在浪费团队的时间在这个结构上——如果不是,那应该没问题。
标签: c++ operator-overloading comma