Próbuję specjalizować klasę szablonów wewnątrz innej klasy, ale kompilator mi nie pozwala. Kod działa poza klasą Foo, ale nie w środku i chcę, aby struct Bla był prywatny dla klasy Foo.Jak specjalizować szablon podklas?
class Foo {
template<typename ... Ts> struct Bla;
template<> struct Bla<> { static constexpr int x = 1; };
};
error: explicit specialization in non-namespace scope 'class Foo'
Dzięki, to jest właśnie rozwiązanie. –
@GoswinvonBrederlow zauważ, że użyłem tutaj 'public', więc mogę wyświetlić' Bla :: x'. Jednak domyślam się, że używasz 'przyjaciela' lub wyświetla się poprzez funkcję członka, w takim przypadku powinieneś być w porządku. – vsoftco
To sprawia, że myślę. Czy to nie pozwala pogwałcić prywatności klasy? 'class Foo {static constexpr int y = 1; public: template struct Bla; }; szablon <> struct Foo :: Bla <> {static constexpr int x = y; }; 'Foo :: y jest prywatny, ale poprzez wyspecjalizowanie Bla'a każdy użytkownik Foo może uzyskać do niego dostęp poprzez Bla :: x. –