我希望只有一个模板函数。因此,我想到了如下方法...
template<typename Iteratable, size_t N,
typename =
std::enable_if_t<
std::is_same_v<Iteratable, const std::initializer_list<size_t> > ||
std::is_same_v<Iteratable, const std::array<size_t, N > >
>
>
std::ostream& operator << (std::ostream& os, Iteratable& in) {
std::copy(std::begin(in), std::end(in), std::ostream_iterator<size_t>(os, " ") );
return os;
}
看起来是因为在std::array<size_t,N>
中的N
,导致了特化失败。
有没有什么方法可以不写两个函数来处理这种情况?
N
不能从initializer_list中推导出来是正确的。 - Bo Persson