Можно ли разработать статический цикл в 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 работать намного проще, чем с версией метапрограммирования.

Ответы на вопрос(3)

Ваш ответ на вопрос