用于接受容器类型作为输出参数的方法的协议/约定

时间:2012-12-21 13:01:42

标签: c++ stl

当你有接受容器作为输出参数的方法时,它的职责是清除列表吗? (如果有的话) 例如,

bool GetResults(int nID, list<string>& results)
{
    .....
}

在这种情况下,GetResults方法应该清除列表吗?或者它应该假设呼叫者知道他在做什么? 如果GetResults清除输出列表,那么它可以否定调用者在多个调用中收集结果的努力, 例如,

list<string> results.

GetResults(1,results)

GetResults(17,results)

2 个答案:

答案 0 :(得分:2)

我的建议是编写这样的方法,以便它们采用输出迭代器:

template <typename OutputIterator>
OutputIterator GetResults(int nID, OutputIterator out)

这推动了将结果清除回调用者的决定。

它决定了使用哪个容器将结果保存回调用者 - 在界面中不再需要硬编码std::list

答案 1 :(得分:1)

答案实际上取决于你喜欢什么,然后说出界面规范中发生的事情并坚持下去。

只要你不混合并且保持一致,我认为清空清单并不重要。