私の質問は少しばかげていますが、あなたのような上級プログラマーに尋ねることにしました。そこで、「動的な」C++プログラムを作成したいと思います。私の考えは、それをコンパイルし、コンパイル後に(おそらくPythonのようなスクリプト言語を使用して)プログラムのコードを変更することです。コンパイル後、コードを変更することはできませんが、それを行う方法はあります。ありがとうございました!
3 に答える
C ++でこれを行う唯一の方法は、変更するコードを含むDLLをアンロードし、ソースを変更し、コンパイラを呼び出してDLLを再生成し、DLLをリロードすることです。これは非常に非常に重量があり、コードが実行されるマシンにコンパイラが存在する場合にのみ機能します。(通常、Unixの場合、Windowsの場合はめったにありません。)
Pythonのようなインタプリタ言語はかなり動的です。たとえば、Pythonには、文字列をPythonコードとして実行する関数が組み込まれています。動的に変更可能なコードが必要な場合は、アプリケーションにPythonを埋め込み、動的な部分に使用することをお勧めします。
個人的には、実行時にC ++を再コンパイルしたことは一度もありませんし、そうするつもりもありません。しかし、私は最近、スクリプト言語の埋め込みをたくさん行っています。
他の誰かが、埋め込みの明らかな最初の選択肢であるLuaについて言及しました。Luaは埋め込むのに非常に人気のある言語であり、それを行う方法についてのドキュメントがたくさんあります。これをC++に統合すると、実行時に必要に応じて動作を定義できます。
私が使っているのはリスと呼ばれる素晴らしい言語です。これはLuaによく似ていますが、ネイティブオブジェクト(クラス)のサポートとC++のような構文を備えています。私はそれをC++アプリケーションに埋め込むことができ、sqratバインディングライブラリを使用することで、両方の言語で情報を簡単に共有できます。
リスを作成してUIを初期化しています。その結果、ゲームのUIを作成および構造化するには、0のコンパイルが必要です。私はこれをさらに一歩進めて、あなたが探している同様の振る舞いを作成するためにこのゲームプレイ側を使用するつもりです(動的なコード使用による実行時の振る舞いの変更)
ここでリスをチェックすることをお勧めします:http ://www.squirrel-lang.org/
リスを埋め込んでバインディングライブラリをインストールする方法についてのチュートリアルを書く予定ですが、まだ始めていません。覚えていれば、この投稿を完成させたら、将来(数か月かかる可能性があります)編集します。それまでの間、自分で試してみてください。あなたはそれをあなたの好みに合わせるかもしれません。