Я хотел бы знать, возможно ли иметь цикл for во время компиляции с условием времени выполнения или даже с ограничением времени компиляции в c ++ 11
Я не знаюразумный способ иметь такой цикл с условием времени выполнения.
с условием времени компиляции ... Если вы можете использовать хотя бы C ++ 14, вы можете использовать решение, основанное на std::integer_sequence
/ std::make_integer_sequence
(см. ответ Калет) или, может быть, std::index_sequence
/ std::make_index_sequence
(чуть более искусственно).
Если вы ограничены в C ++ 11, вы можете создать суррогат для std::index_sequence
/std::make_index_sequence
или вы можете создать рекурсивную структуру шаблона со статической функцией (к сожалению, вы можете частично специализировать функцию шаблона, но вы можете частично специализировать классы и структуры).
Я имею в виду ... что-то следующее
template <std::size_t I, std::size_t Top>
struct for_loop
{
static void func ()
{
templated_func<I>();
for_loop<I+1u, Top>::func();
}
};
template <std::size_t I>
struct for_loop<I, I>
{ static void func () { } };
, который вы можете вызвать
constexpr auto n = 10u;
for_loop<0, n>::func();
, если хотите позвонить templated_func()
со значениями от нуля до n-1u
.
К сожалению, это решение рекурсивное, поэтому вы можетеесть проблемы с ограничениями рекурсии компиляторов.То есть ... работает, только если n
не высоко.