Создать статический массив с вариативными шаблонами

Был ответ по stackoverflow (который я могу ' t, похоже, больше не нашел), который продемонстрировал, как вариативный шаблон может использоваться в C ++ 11 для создания статического массива во время компиляции:

template <class T, T... args> 
struct array_
{
    static const T data[sizeof...(args)];
};

template <class T, T... args> 
const T array_<T, args...>::data[sizeof...(args)] = { args... };

Рекурсивная мета-функция может быть предоставлена ​​для создания экземпляра array_ с помощью любое количество параметров, которые затем будут скопированы во время компиляции во внутренний массив. Это полезный способ создания мета-функций для генерации постоянных массивов во время компиляции.

Однако одна проблема заключается в том, что получение фактических значений для заполнения массива зависит от параметров шаблона класса . Это приводит к одному серьезному ограничению: только интегральные константы могут использоваться в качестве параметров шаблона значений. Итак, вы не можете использовать эту технику для создания массивов пользовательских типов.

Я пытался придумать что-нибудь, чтобы обойти это ограничение, но ничего не смог придумать. Есть ли способ заставить этот метод работать с нецелочисленными константами?

25
задан Lightness Races with Monica 2 April 2015 в 16:43
поделиться