我有一个使用矢量<的std :: string >内部容器类。我已经提供了一个方法AddChar(std :: string)到这个包装类,它向内部向量执行push_back()。在我的代码中,我必须在容器中添加多个项目。为此我必须使用
container.AddChar("First");
container.AddChar("Second");
这会使代码变大。所以为了使它更容易,我计划超载运营商< <。所以我可以写
container << "First" << "Second"
和两个项目将被添加到底层向量。
这里是我用于该
class ExtendedVector
{
private:
vector<string> container;
public:
friend ExtendedVector& operator<<(ExtendedVector& cont,const std::string str){
cont.AddChar(str);
return cont;
}
void AddChar(const std::string str)
{
container.push_back(str);
}
string ToString()
{
string output;
vector<string>::iterator it = container.begin();
while(it != container.end())
{
output += *it;
++it;
}
return output;
}
};
它按预期工作的代码。
问题
- 是运算符重载正确写入?
- 在这种情况下重载操作符是否是一种好习惯?
- 此代码是否会有任何性能问题或任何其他问题?
有什么想法?
编辑
听到很好的意见后,我决定不超载< <,因为它没有意义在这里。我删除了运算符重载代码,这里是最终的代码。
class ExtendedVector
{
private:
vector<string> container;
public:
ExtendedVector& AddChar(const std::string str)
{
container.push_back(str);
return *this;
}
.. other methods
}
这让我通过使用params关键字添加
container.AddChar("First").AddChar("Second")
在C#中,我可以做到这一点更容易。代码会像
void AddChar(params string[] str)
{
foreach(string s in str)
// add to the underlying collection
}
我知道在C++中,我们可以使用...指定的参数变量langth。但是AFAIK,它不是类型安全的。那么这是一个推荐的做法吗?所以我可以写
container.AddChar("First","Second")
感谢您的答复。
Qt使用operator <<为QStringList:http://doc.trolltech.com/4.4/qstringlist.html,我喜欢它的使用。但通常我会注意不要添加太多的操作员。正如凯文所说,它可能会变得混乱如地狱:) – 2009-03-02 04:09:38