Инициализация массива с помощью constexpr?

Интересно, можно ли инициализировать весь массив с помощью функции constexpr (в C++ 2011). Вот кое-что, чтобы проиллюстрировать то, что я хочу сделать:

template<unsigned int DIM> const unsigned int MyClass<DIM>::_myVar[2][3] = {
{metaFunction(0, 0, DIM), metaFunction(0, 1, DIM), metaFunction(0, 2, DIM)}, 
{metaFunction(1, 0, DIM), metaFunction(1, 1, DIM), metaFunction(1, 2, DIM)}
};

template<unsigned int DIM> inline constexpr unsigned int MyClass<DIM>::metaFunction(const unsigned int k, const unsigned int n, const unsigned int dim)
{
    return (((n < dim) && (k < n)) ? (1<<(n-k)) : (0));
}

Есть ли способ инициализировать myVar с помощью constexpr без заполнения массива вручную. И если он существует, каков будет синтаксис для данного примера?

Чтобы немного уточнить вопрос, я ищу способ заполнить все значения myVar с помощью одного вызова функции.

7
задан Mat 18 May 2012 в 06:06
поделиться