Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 印刷STL容器用于认证试验的公约_C++_Fmt_Approval Tests - Fatal编程技术网

C++ 印刷STL容器用于认证试验的公约

C++ 印刷STL容器用于认证试验的公约,c++,fmt,approval-tests,C++,Fmt,Approval Tests,我正在使用优秀的库编写批准测试。该库自动生成函数结果的“快照”。快照是使用ostream&operator将T类型的结果序列化到文件中生成的。我不知道打印容器的任何惯例或标准建议。但是,可以打印任何范围和元组之类的内容:因此您可以将其与ApprovalTests集成,并避免自己定义ostream插入运算符 免责声明:我是{fmt}的作者。所有容器都提供迭代器;使用一对迭代器的显示函数要比为每种容器类型手工连接不同的函数要好得多。一旦你编写了函数来展示你想要的东西,你就可以在每个容器中使用它。为了

我正在使用优秀的库编写批准测试。该库自动生成函数结果的“快照”。快照是使用
ostream&operator将
T
类型的结果序列化到文件中生成的。我不知道打印容器的任何惯例或标准建议。但是,可以打印任何范围和元组之类的内容:因此您可以将其与ApprovalTests集成,并避免自己定义ostream插入运算符


免责声明:我是{fmt}的作者。

所有容器都提供迭代器;使用一对迭代器的显示函数要比为每种容器类型手工连接不同的函数要好得多。一旦你编写了函数来展示你想要的东西,你就可以在每个容器中使用它。为了安全起见,作为Rust,如果你既不拥有类也不拥有traits,你就不应该编写函数/traits。因此,
operatorHi,代表我和Llewellyn Falco——ApprovalTests.cpp的两个维护者——非常感谢这个问题,以及其中真正有用的链接。。。我们不知道这些库中的大多数-我们会在可能的时候对它们进行实验,如果我们有任何有用的评论,我们会在这里回复…@PeteBecker你是对的,迭代器在生成简单项(如
vector
list
)时可以工作但是关于
std::map
?@ClareMacrae我已经用你的库做了一些实验。在这里,我使用fmt自动格式化受支持的容器:这是一个测试项目:我专门化了StringUtils::toString,而不是实现
操作符或为响应向您提供帮助。我已经使用fmt很长一段时间了,我非常感谢它来到了std。我正在尝试将它集成到ApprovalTests中。cpp:它似乎像预期的那样工作,这里有一个用它测试的示例项目:你有什么建议吗?非常酷。我唯一的建议就是尽量避免使用
fmt/ostream.h
,除非绝对必要。是的,你是对的。在这种情况下,
std::string
是返回类型,我可以使用
format
而不是
print
template <typename STREAM, typename T> STREAM& operator<<(STREAM& os, const std::vector<T>& vec) {
  os << "[";
  for (const auto& x : vec) {
    os << x << ", ";
  }
  os << "]";
  return os;
}
template <typename T> std::ostream& operator<<(std::ostream& os, const std::vector<T>& v) {
  using namespace std;
  os << "[";
  copy(v.begin(), v.end(), ostream_iterator<T>(os, ", "));
  os << "]";
  return os;
}
template <typename STREAM, typename T> STREAM& operator<<(STREAM& os, const std::vector<T>& vec) {
  fmt::print(os, "[{}]", fmt::join(vec, ", "));
  return os;
}
template <typename STREAM, typename T> STREAM& operator<<(STREAM& os, const std::vector<T>& vec) {
  fmt::print(os, "{}", vec);
  return os;
}
template <typename STREAM, typename T> STREAM& operator<<(STREAM& os, const std::vector<T>& vec) {
  pprint::PrettyPrinter printer{os};
  printer.print(vec);
  return os;
}