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

Protocol/Convention for methods accepting container types as output parameters

本文关键字:参数 方法 协议 约定 输出 类型      更新时间:2023-10-16

当您有接受容器作为输出参数的方法时,谁负责清除列表?(如果有的话)例如,

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

在这种情况下,GetResults方法是否应该清除列表?还是应该假设调用者知道他在做什么?如果GetResults清除输出列表,那么它可能会使调用者在多个调用中收集结果的努力无效。例如,

list<string> results.
GetResults(1,results)
GetResults(17,results)

我的建议是编写这样的方法,使它们接受一个输出迭代器:

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

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

它将使用哪个容器来保存结果的决定也推给了调用者-不再在接口中硬编码std::list

答案真的取决于你喜欢什么,然后说在接口规范中发生了什么,并坚持它。

只要你不混淆并且保持一致,我认为谁清空列表并不重要。