Estoy compilando el código siguiente bajo gcc con -fvisibility = hidden:Problema con C++ argumentos de plantilla con la visibilidad oculto
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> >;
Si funciono el archivo objeto resultante a través nm | grep B, consigo
000000000002b97c t B<A<int> >::B()
000000000002b972 t B<A<int> >::B()
000000000002b968 T B<int>::B()
000000000002b95e T B<int>::B()
es decir, B<int>
es visible, pero es invisible B<A<int> >
. B<A<int> >
se vuelve visible si elimino el comentario de la marca de fragmento A<T>
como visible. Sin embargo, no quiero marcar todo A visible, ya que en el código real A<T>
contiene una gran cantidad de métodos que deben permanecer privados.
¿Por qué la visibilidad de A<T>
afecta la visibilidad de B<A<T> >
? ¿Puedo hacer B<A<T> >
visible sin hacer todo A<T>
visible?
En mi código A <> es una clase de vectores con un gran número de métodos inline, y yo' Me gustaría evitar exportarlos todos por el tamaño del archivo y el tiempo de carga. –