所以我是一位经验丰富的C程序员,最近我正在编写一个玩具编译器的C ++。我目前正在"现代化"我的C ++代码,因为我当前的代码看起来更像ANSI-C,它利用的唯一C ++是std :: vector。
所以我决定使用迭代器而不是通过带有count变量的for循环手动迭代容器和数组。我注意到我需要经常到达几个迭代器的中间,所以我写了一个带有函数的静态类。
现在我将此函数扩展为不仅将迭代器返回到中间元素,而且还将迭代器的向量返回到容器的多个部分。我正在使用模板使代码更通用,但是我对当前函数的实现感到困惑。
以下是该类的定义:
namespace dbc {
template<typename generic_iterator_t>
class itertools {
public:
/* returns an iterator which points to the middle element,
* the same as calling get_fraction_iterator with fraction = 2 */
static generic_iterator_t get_middle_iterator(
generic_iterator_t begin, generic_iterator_t end
);
/* splits a container into several chunks and returns
* the iterators in a vector */
template<typename generic_iterator_t, size_t chunks>
static std::vector<generic_iterator_t> get_chunk_iterator(
generic_iterator_t begin, generic_iterator_t end
);
/* calculates the optimal chunk size, particulary useful
* for get_chunk_iterator */
template<typename generic_number_t>
static constexpr generic_number_t
get_optimal_chunk_size(generic_number_t val);
};
}
如何实现此功能? 据我所知,这应该是正确的,但它不是。
template<typename generic_iterator_t, size_t chunks>
static std::vector<generic_iterator_t>
dbc::itertools<generic_iterator_t>::get_chunk_iterator<
generic_iterator_t, size_t
>(generic_iterator_t begin, generic_iterator_t end)