Ich frage mich, ob es in C++ 11/14 möglich ist, Dateien tatsächlich zur Kompilierzeit zu lesen. Der folgende Code wird beispielsweise nur dann kompiliert, wenn er die Datei erfolgreich lesen kann.Kann eine Datei zur Kompilierzeit gelesen werden?
constexpr std::string shader_source = load("~/foo.glsl");
Glauben Sie, dass dies möglich ist?
Ich weiß, dass ich dies mit einem benutzerdefinierten Tool beim Erstellen meiner Anwendung tun konnte.
Es hängt davon ab, was Sie durch * load * entwöhnen. Die einzige Lösung, die ich kenne, ist '# include', und es bedeutet, dass der Inhalt der Datei vom Compiler verstanden werden muss. –
Was Sie wahrscheinlich wollen, ist eine externe Variablendeklaration, die vom Linker an die tatsächlichen Daten angepasst wird. Kombinieren Sie das mit einem Werkzeug, das eine beliebige binäre Ressource in eine Objektdatei mit einem exportierten Symbol Ihrer Wahl einbettet, und Sie sind golden. (Ich könnte ein solches Tool vorschlagen, aber Sie haben nicht erwähnt, welche Toolchain Sie verwenden, und die Tools sind unterschiedlich für ELF vs CV vs PE vs a.out Objektdateiformate) Beachten Sie, dass die Ressource in C/C++ - Code konvertieren Ein mit hexadezimalen Literalen initialisiertes Konstantenarray ist wahrscheinlich sehr sehr langsam. Gehen Sie also direkt zur Objektdatei. –
Ich kann nicht glauben, dass deine 'load' Funktion ein' constexpr' ist. Daher kann der vollständige Ausdruck nicht konsexpr sein. Ich habe keine Ahnung, wie ein externer Dateiinhalt ein conexpr-String sein kann.Die einzige Möglichkeit besteht darin, ein Werkzeug zu verwenden, das die Datei einfach lädt und c/C++ - Code erzeugt. – Klaus