C++ では、文字列変数から C++ コードを実行できます。Javascript のように:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
C++ の Javascript のような非常によく似たものが必要です。どうやってするか ?
C++ では、文字列変数から C++ コードを実行できます。Javascript のように:
var theInstructions = "alert('Hello World'); var x = 100";
var F=new Function (theInstructions);
return(F());
C++ の Javascript のような非常によく似たものが必要です。どうやってするか ?
いいえ、C++ は静的型付けで、ネイティブ バイナリ言語にコンパイルされます。
LLVM JIT コンパイルを使用することもできますが、ランタイムを中断することなくコンパイルおよびリンクします。実行できるはずですが、C ++のドメインにはありません。
C++ でスクリプト エンジンが必要な場合は、たとえば JS を使用できます。これは、群を抜いて最速の動的ソリューションです。Lua、Python、Ruby も問題ありませんが、通常は遅くなります。これは、スクリプトを作成するためだけに使用していることを考えると、ひどいことではないかもしれません。
たとえば、Qt では次のようなことができます。
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QScriptEngine engine;
QScriptValue value = engine.evaluate("var a = 20; var b = 30; a + b");
cout << value.toNumber();
return a.exec();
}
そして、あなたは50を得るでしょう;)
コードをコンパイルするには、コンパイラを呼び出す必要があります。さらに、関数宣言で文字列をラップするコードを生成する必要があります。最後に、何らかの方法でコンパイル済みコードをロードする必要があります。
私がこれをしていたら(私はしません)、私は次のことをします:
system()
) からコンパイラを呼び出して、共有ライブラリを構築します ( .dll
Windows または.so
Linux 上)。ほとんどの場合、これは実際には C コードの書き方ではありません。
直接、いいえ。でも君ならできる:
C++ はコンパイル済み言語です。C++ ソースを実行可能ファイルであるマシン コードにコンパイルします。それがロードされ、実行されます。コンパイラは C++ について認識しています (そして、すべてのライブラリ ヘッダーが利用可能です)。そのため、文字列を実行可能コードに変換することはできません。確かに、たまたまマシンコード命令が含まれている場合、文字列の内容を実行できますが、それは一般的に非常に悪い考えです...
これは、この種のランタイム コンパイルを実行できないという意味ではありません。C++ で不可能なことはほとんどありません。しかし、あなたがやっていることは、C++ コンパイラ オブジェクトを実装することです...本当にこれが必要かどうかを判断する前に、他のコンパイラ プロジェクトを見てください。
インタープリター型言語はこれを簡単に行うことができます - 既にプログラムを実行しているインタープリターに文字列を渡すだけです。彼らは、他の点でこの種の柔軟性にお金を払っています。
短い答えはノーです。ハッカーは野外活動をします。ただし、Windows の IActiveScriptSite インターフェイスを使用して Java/VB スクリプトを利用することはできます。Google IActiveScriptSite には、ウェブ上に多数の例があります。または、私が現在行っていることを実行して、独自のスクリプト エンジンを展開することもできます。