Mam następujący kod kompilacji pod gcc z -fvisibility = ukryty:Problem z C++ argumentów szablonu z ukrytym widoczności
template<class T> struct /*__attribute__ ((visibility("default")))*/ A {};
template<class T> struct B
{
B() __attribute__ ((visibility("default")));
};
template<class T> B<T>::B() {}
template class B<int>;
template class B<A<int> >;
Jeśli uruchomić plik wynikowy obiekt poprzez nm | grep B, otrzymuję
000000000002b97c t B<A<int> >::B()
000000000002b972 t B<A<int> >::B()
000000000002b968 T B<int>::B()
000000000002b95e T B<int>::B()
Tj B<int>
jest widoczny, ale B<A<int> >
jest niewidoczny. B<A<int> >
staje się widoczny, jeśli odkomentowuję oznaczenie snippet A<T>
jako widoczne. Jednak nie chcę oznaczać wszystkich A, ponieważ w rzeczywistym kodzie A<T>
zawiera ogromną liczbę metod, które powinny pozostać prywatne.
Dlaczego widoczność A<T>
wpływa na widoczność B<A<T> >
? Czy mogę uczynić B<A<T> >
widocznym bez pokazywania całego A<T>
?
W moim kodu A <> to klasa wektor z wielu metod inline, a ja Nie chcę eksportować ich wszystkich ze względu na rozmiar pliku i czas ładowania. –