Frage

Wie der Titel schon sagt, ist es richtig oder gültig zu importieren / exportieren statische Daten aus einer C ++ Klasse?

fand ich mein Problem heraus - der Autor der Klasse I bei suchte versuchten beschreibbaren statische Daten zu exportieren, das auf dieser Plattform nicht unterstützt wird,

.

Vielen Dank für die Antworten jedoch.

War es hilfreich?

Lösung

Ist es insofern zu korrigieren, wie es funktioniert und tun, was Sie erwarten, dass es? Unter der Annahme, dass Sie sprechen über die Verwendung von _declspec (dllexport / dllimport) auf einer Klasse oder Klassenmitglied, ja, können Sie das tun und es sollten Sie das erwartete Ergebnis geben - die statischen Daten würden außerhalb Ihrer dll und andere C zugänglich sein ++ Code könnte zugreifen vorgesehen, dass, dass C ++ Zugriffsspezifikation (public / protected / privat) würde den Zugriff von außen in erster Linie nicht blockieren.

Ist es eine gute Idee? Persönlich glaube ich nicht, so wie Sie Klasse Interna auszusetzen würden nicht nur innerhalb der Bibliothek, sondern an die Außenwelt, was bedeutet, dass es ziemlich unmöglich sein wird, zu ändern, was ist eine Implementierung Detail am Ende des Tages. Fragen Sie sich, wenn Sie 100% sicher, ob die Schnittstelle dieser Klasse und große Teile ihrer Umsetzung sind, werden sich niemals ändern ...

Andere Tipps

Eine exportierte C ++ Klasse bedeutet, dass die DLL-Clients wegen des Namens den gleichen Compiler als DLL verwenden, haben Mangeln und andere Fragen. Dies ist eigentlich ein ziemlich großes Problem, ich musste einmal C-Wrapper zu einer Reihe von C ++ Klassen schreiben, weil die Client-Programme zu MSVC9 eingeschaltet hatten, während die DLL selbst MSVC71 wurde mit. [Es gab einige andere Komplikationen, die mit der DLL zu MSVC90 Umschalten]. Seitdem habe ich schon ziemlich skeptisch über dieses Geschäft Klassen exportieren, und es vorziehen, einen C-Wrapper für alles zu schreiben.

Nun, wenn Sie bereit sind, den Preis für den Export Klassen zu zahlen, würde ich sagen, dass statische Daten exportieren nicht das Problem noch schlimmer macht. Argumentieren, unter den Arten von Dingen, die Sie exportieren können, ist es am sichersten, statischen Konstanten zu exportieren. Trotzdem würde ich lieber nicht tun, denn wie Timo sagt, ich bin jetzt in diese Implementierung gesperrt.

Einer der Frameworks, die ich benötigte, um ihre Kunden gearbeitet, um eine Reihe von Fehlercode Konstanten zur Verfügung zu stellen. Im Laufe der Zeit fanden wir, dass eine einfache Reihe von Konstanten war zu spröde, und wir zu einem OO-Design umgestellt. Wir hatten eine Standardimplementierung, die den gemeinsamen Fehlercodes zurückkommen würde, aber jeder des Fehlercodes wurde eine virtuelle Funktion zugegriffen verwendet, die von den einzelnen Clients außer Kraft gesetzt werden könnten - und sie verwendete sie von einer erweiterten gerätespezifische Fehlerbehandlung. Diese Lösung erwies sich als far skalierbarer als die basierend auf Konstanten exportieren.

Ich würde vorschlagen, dass Sie denken, lange und intensiv darüber, wie Sie die Komponente entwickeln erwarten, bevor Sie statische Variablen zu exportieren.

Dllexport (oder Import) auf einer Klasse (nicht statisch) Daten Mitglied tut nichts. Exportiert „Dinge“ sind entweder Funktionen oder globale Daten (obwohl dies eine fragwürdige Design-Wahl ist). Dllexport auf einer Klasse ist nur eine Verknüpfung zu sagen „alle diese Funktionen exportieren“.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top