Ich habe hier eine ähnliche Frage dazu gestellt und die Antwort war, dass dies nicht wirklich möglich ist, ohne den Quellcode der Bibliothek zu ändern, es sei denn, die Bibliothek wurde mit der spezifischen Absicht erstellt, als Modul verwendet zu werden. Ebenso legt die Antwort auf eine ähnliche Frage hier nahe, dass eine Bibliothek, damit sie als Modul verwendet werden kann, über Makros verfügen muss, die unterscheiden, ob sie als Nur-Header-Bibliothek oder als Modul verwendet wird, nämlich die Einführung des Schlüsselworts export. Und so gab ich den Versuch auf, dies auszuprobieren.
Vor Kurzem wurde ich jedoch auf eine bestimmte Methode aufmerksam und war ziemlich überrascht, dass sie funktionierte. Erstellen Sie zunächst ein Modul und gehen Sie wie folgt vor:
Code: Select all
module;
#include "glm/glm.hpp"
export module glm_module;
export namespace glm
{
using glm::vec2;
using glm::vec3;
}
Und wenn Sie es dann verwenden müssen, tun Sie einfach Folgendes:
Code: Select all
import glm_module;
int main()
{
glm::vec2 myvec2; // simply use them now.
glm::vec3 myvec3;
}
Und es funktioniert einfach mit dem Clang-Compiler. Das scheint so einfach und vielseitig zu sein, dass es den Anschein hat, als würde es mit so ziemlich jeder Bibliothek funktionieren. Ich frage mich, ob dies der Fall ist und ob diese Technik plattformübergreifend ist und von mehreren Compilern/Toolchains unterstützt wird.