【发布时间】:2021-12-28 08:57:09
【问题描述】:
我正在尝试写一个模板,它可以接受一些序列容器:
template <typename S,
typename = std::enable_if_t<
std::is_same<S, std::array<typename S::value_type>, S::size()>::value ||
std::is_same<S, std::vector<typename S::value_type>>::value>>
std::string arr2String(const S& seqContainer) {
std::stringstream res;
for (const auto& element : seqContainer) {
res << element << "|";
}
return res.str();
}
但是,由于S::size(),无法编译。显然,没有这样的事情。
是否可以做这样一个模板函数,可以处理std::vector和std::array?
【问题讨论】:
-
仅
std::vector或std::array? -
我建议你根本不要传递容器,而是像标准库本身那样做:传递迭代器范围。
-
为什么必须是数组或向量?您的代码适用于 std::arrays、向量、列表、双端队列、字符串、C 数组和跨度。为什么仅限于 std::arrays 和向量?
-
@Yves 但为什么不删除第二部分而只保留
template<typename S>? -
最简单、最简单、最便携、最老派的方法是接受一对迭代器。一路 C++98。
标签: c++ arrays templates c++14