Я хотел бы знать, возможно ли иметь какие-то промежутки времени компиляции.
Например, у меня есть следующий шаблонный класс:
template<class C, int T=10, int B=10>
class CountSketch
{
public:
CountSketch()
{
hashfuncs[0] = &CountSketch<C>::hash<0>;
hashfuncs[1] = &CountSketch<C>::hash<1>;
// ... for all i until i==T which is known at compile time
};
private:
template<int offset>
size_t hash(C &c)
{
return (reinterpret_cast<int>(&c)+offset)%B;
}
size_t (CountSketch::*hashfuncs[T])(C &c);
};
Мне бы хотелось узнать, могу ли я сделать цикл для инициализации т х-х функций, используя цикл. Оценки циклов известны во время компиляции, поэтому в принципе я не вижу причин, по которым это невозможно сделать (особенно, поскольку это работает, если я разворачиваю цикл вручную).
Конечно, в этом конкретном примере я мог бы просто создать одну хеш-функцию с двумя параметрами (хотя это было бы менее эффективно, я думаю). Поэтому я не заинтересован в решении этой конкретной проблемы, а знаю, что для подобных случаев существовали "компиляции временных циклов".
Спасибо!