Был ответ по 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_
с помощью любое количество параметров, которые затем будут скопированы во время компиляции во внутренний массив. Это полезный способ создания мета-функций для генерации постоянных массивов во время компиляции.
Однако одна проблема заключается в том, что получение фактических значений для заполнения массива зависит от параметров шаблона класса . Это приводит к одному серьезному ограничению: только интегральные константы могут использоваться в качестве параметров шаблона значений. Итак, вы не можете использовать эту технику для создания массивов пользовательских типов.
Я пытался придумать что-нибудь, чтобы обойти это ограничение, но ничего не смог придумать. Есть ли способ заставить этот метод работать с нецелочисленными константами?