Можно ли разработать статический цикл в C ++?
Возможно ли что-то подобное существовать?
template
void deduce_mask(Matrix const &src, int mask[])
{
//I hope i could become a constant and the compiler would unroll the loop at compile time
for(int i = Channel; i != -1; --i)
{
//mapper is a helper class which translate two and three dimension into one dimension index
//constexpr makes it possible to find out the index at compile time
mask[mapper(0, 1, i)] = src(row - 1, col)[i];
mask[mapper(1, 1, i)] = src(row, col)[i];
mask[mapper(2, 1, i)] = src(row + 1, col)[i];
}
}
вместо
template
class deduceMask
{
public:
static void deduce_mask(matrix const &src, int mask[]);
};
template
void deduce_mask(matrix const &src, int mask[])
{
mask[mapper(0, 1, Channel)] = src(row - 1, col)[Channel];
mask[mapper(1, 1, Channel)] = src(row, col)[Channel];
mask[mapper(2, 1, Channel)] = src(row + 1, col)[Channel];
deduceMask::deduce_mask(src, mask);
}
template
class deduceMask
{
public:
static void deduce_mask(matrix const &src, int mask[])
{
}
};
Второе решение - это единственное решение, которое я могу предложить, когда хочу, чтобы компилятор выяснил результат во время компиляции. Есть ли у меня простой способ сделать «я» стать постоянным значением, как решение метапрограммирования? Для меня с простым циклом for работать намного проще, чем с версией метапрограммирования.