Jestem pewien, że znam już odpowiedź na to pytanie, ale warto spróbować.Czy mogę zadeklarować specjalizację szablonu z listy typów?
Tak, że mam typelist:
template <typename ...Ts>
struct typelist{};
który zawiera kilka obiektów:
struct foo{};
struct bar{};
struct quux{};
using objects = typelist<foo, bar, quux>;
teraz mam szablonie klasy (baz
), który może podjąć każdą z tych obiektów. Ale ze względu na rozmiar kodu i czas kompilacji, chcę mieć implementację mojej szablonowej metody w pliku cpp.
Więc na dole baz.cpp mam:
template <> class baz<foo>;
template <> class baz<bar>;
template <> class baz<quux>;
Problemem jest to, że mają wiele zajęć jak baz
, a lista obiektów, które pracują z również zawsze się zmienia. A więc ... czy w każdym razie mogę zachować moją pojedynczą typelistę obiektów i użyć tego w pliku cpp każdego obiektu, który specjalizuje się w baz
? Następnie wszystko, co muszę zrobić, to zaktualizować moją listę typów, gdy mam nowy obiekt i wszystkie pliki obiektów zostaną odbudowane.
Nie trzeba * wyspecjalizować *, tylko jawnie * tworzyć ich *. – Jarod42
Można to zdecydowanie zrobić za pomocą makra. Biorąc pod uwagę, że będzie to izolowane od reszty twojego kodu, dlaczego nie po prostu to zrobić? –