Specjalizacja variadic templates

0

Załóżmy, że mam następujący szablon klasy:

template <typename... Types>
class Klasa;

Czy jest możliwe zrobienie jego specjalizacji dla Types... będącego listą typów utworzonych z pewnego innego szablonu?
Przykładowo jeśli mam jakaś inną szablonową klasę:

template <int N>
class Szablon;

To czy jest możliwe zrobienie specjalizacji szablonu Klasa dla Types... będącego listą typów Szablon<N_i> gdzie N_i jest jakimś skończonym ciągiem stałych?

Edit:
W szczególności chciałbym mieć pod jakimś argumentem N... specjalizacji szablonu ów ciąg stałych.

0

czy chodzi Ci o coś takiego? Bo nie do końca zrozumiałem

 
#include <iostream>

template <class T>
class Podrzedna
{
  T data;
};

template <class T>
class Nadrzedna
{
    Podrzedna<T> data;
};

int main()
{
  Nadrzedna<int> jakis_int;

  return 0;
}
0

Nie. Jeszcze raz. Mam takie dwa szablony:

template <typename... Elements>
class Lista;

template <int N>
class Element;

Chcę zrobić specjalizację szablonu Lista dla parametru Elements... następującej postaci:

Element<N_0>, Element<N_1>, Element<N_2>, ... Element<N_m>

Czyli generalnie jakby specjalizację w stylu:

template <int... Seq>
class Lista<Element<Seq_0>, Element<Seq_1>, Element<Seq_2>, ... Element<Seq_m> >;

Przy czym powyższe to taki "pseudokod" co ma zobrazować o co mi chodzi. Wiadomo, że to się nie skompiluje.

EDIT:
Gdyby to nie był variadic template tylko zwykły o stałej liczbie parametrów:

template <typename T1, typename T2, typename T3>
class Lista;

template <int N>
class Element;

To sprawa była by prosta:

template <int N1, int N2, int N3>
class Lista<Element<N1>, Element<N2>, Element<N3> >;

I to by działało. Ale ja chcę to osiągnąć na variadic template.

1

Chodzi Ci o cos takiego?

template <int... Seq>
class Lista<Element<Seq>...>;

http://ideone.com/z9lc0o

Z tym jest taki problem, że Lista<> cokolwiek; to też częściowa specjalizacja (pasuje do szablonu bo ... może być puste) naprawić to można określając domyślny parametr szablonu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1