возможно ли расширить код во время компиляции, используя параметры шаблона?
Непосредственно ... Я так не думаю.
Но я полагаю, вы можетереализовать специфические черты типа следующим образом
template <typename T, std::size_t I>
struct bar
{ using type = std::vector<typename bar<T, I-1U>::type>; };
template <typename T>
struct bar<T, 0U>
{ using type = T; };
и использовать в foo()
таким образом
template <std::size_t I>
void foo ()
{
typename bar<double, I>::type vec;
}
Если вы хотите быть немного более универсальным, вы также можете передать std::vector
как параметр шаблона-шаблона;если вы определите bar
следующим образом
template <template <typename...> class C, typename T, std::size_t I>
struct bar
{ using type = C<typename bar<C, T, I-1U>::type>; };
template <template <typename ...> class C, typename T>
struct bar<C, T, 0U>
{ using type = T; };
foo()
станет
template <std::size_t I>
void foo ()
{
typename bar<std::vector, double, I>::type vec;
}