接受容器类型作为输出参数的方法的协议/约定
Protocol/Convention for methods accepting container types as output parameters
当您有接受容器作为输出参数的方法时,谁负责清除列表?(如果有的话)例如,
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
。
答案真的取决于你喜欢什么,然后说在接口规范中发生了什么,并坚持它。
只要你不混淆并且保持一致,我认为谁清空列表并不重要。
相关文章:
- 使用在用于SFINAE的void_t中具有参数的方法
- 如何制作一个将函数作为参数的类方法
- c++方法参数只能在linux的发布模式下自行更改
- 使用用户定义的参数调用future/async并调用类方法
- 将成员函数指针作为参数传递给模板方法
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 使用模板参数重载C++方法:如何使其适用于模板的子类?
- 具有字符串化的可变参数宏的现代/通用方法
- 在 C++ 中将非指定类型作为参数传递的最佳方法?
- 如何在方法中传递结构参数
- 如何将类成员方法的参数列表自动填充写入可变参数?
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- C++方法是否可以根据传递给构造函数的参数具有不同的返回类型?
- C++接口继承不同的参数方法
- C++ 模板:重载时找不到基类类型参数方法
- 如何使用迭代器作为参数方法?
- 具有不同亚型的参数方法
- 如何以相同的方法在子类中超载的相同方法来实现工作变量参数方法
- 如何将 C 中声明的可选参数方法转换为 c++
- 如果模板化"ResourceCache"需要不同的创建参数/方法,它们如何加载/创建 T 类型的资源?