Problem mit C ++ - Vorlagenargumenten mit ausgeblendeter Sichtbarkeit

9

Ich kompiliere den folgenden Code unter gcc mit -visibility = hidden:

%Vor%

Wenn ich die resultierende Objektdatei über nm | Grep B, ich bekomme

%Vor%

I.e., B<int> ist sichtbar, aber B<A<int> > ist unsichtbar. B<A<int> > wird sichtbar, wenn ich die Snippet-Markierung A<T> als sichtbar auszeichne. Allerdings möchte ich nicht alle von A sichtbar machen, da A<T> im realen Code eine Vielzahl von Methoden enthält, die privat bleiben sollen.

Warum beeinflusst die Sichtbarkeit von A<T> die Sichtbarkeit von B<A<T> > ? Kann ich B<A<T> > sichtbar machen, ohne alle A<T> sichtbar zu machen?

    
Geoffrey Irving 21.03.2011, 16:40
quelle

2 Antworten

1

Wenn ich davon ausgehe, dass ich das ODR richtig verstanden habe (wahrscheinlich nicht :)), sieht es so aus, als ob Sie Ihre B<A<int> > -Instanziierung ausblenden würden. Wenn B<A<int> > nicht ausgeblendet wurde, könnten mehrere Instanzen von A<> -Elementen existieren und referenziert werden, was zu einer ODR-Verletzung führen würde. GCC Symbolsichtbarkeitswiki beschreibt kurz solche Verstöße, wenn die Sichtbarkeit versteckter Symbole auf "Entitäten" mit verwendet wird vage Verknüpfung, einschließlich Vorlagen (siehe Abschnitt über Ausnahmen).

Was möchten Sie erreichen, indem Sie die Symbole in Ihrer A<> Vorlage ausblenden?

    
Void 21.03.2011 19:56
quelle
0

Wenn Sie die Inline-Methoden von A & lt; & gt; versuche es mit -visibility-inlines-hidden

    
dex black 27.03.2011 05:06
quelle

Tags und Links