Я пишу функцию constexpr, и мне нужно использовать constexpr для. L oop может быть вручную расширен вручную, но я нахожу это уродливым в коде и избыточным.
Как я могу создать "constexpr for"?
Должен ли я сделать вспомогательный класс ? Если да, то как бы я go написал что-то вроде этого:
#define for_constexpr( TYPE, VAR, START, CONDITION, END_OP, BODY ) \
for_constexpr_helper< \
TYPE, START, // TYPE START = 0; \
[ ]( TYPE VAR ) constexpr { return CONDITION; }, \
[ ] constexpr { END_OP; }, \
[ & ]( TYPE VAR ) constexpr { BODY; } >( )
Где используется что-то вроде
int x = 0;
for_constexpr( int, i, 0, i < 3, ++i, x += i * 2 );
Более конкретно, как я могу использовать i
в контекст constexpr, такой как параметр шаблона?
Какие у меня параметры?
Пример кода:
auto ret = 0;
for ( int i = 0; i < 3; ++i )
{
static_assert( i != 4 ); // just an example
ret += i;
}
return ret;
Не может быть constexpr. Уродливый пример:
auto ret = 0;
ret += 1;
ret += 2;
ret += 3;
return ret; // works