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