正直に言うと、あなたが説明したように良い考えだとは思いませんが、可能性はあります.
これにより、C++ の静的な数の引数の「煩わしい」負担が制限されます。これは、言語で必要な場合とそうでない場合があります。
これを想像してみてください - 関数を表現したいとします:
VM::allFunctions["functionName"](variable1);
しかし、その関数は 2 つの引数を取ります! dynamic-args 関数をどのように定義しますか? " ...
" とは、 と を意味stdargs.h
しva_list
ます。残念ながら、va_list には欠点があります。追加の変数を指定する必要があります。これにより、変数がいくつあるかを何らかの形で知ることができます。そのため、架空の関数呼び出しを次のように変更します。
VM::allFunctions["functionName"](1, variable1);
VM::allFunctions["functionWithtwoArgs"](2, variable1, variable2);
これにより、新しい問題が発生します-実行時に、複数の引数を渡す方法はありません! したがって、これらの引数を組み合わせて、実行時に定義および使用できるものにする必要があります。(仮説的に)次のように定義しましょう。
typedef std::vector<Variable* > VariableList;
そして、私たちの呼び出しは次のとおりです。
VM::allFunctions["functionName"](varList);
VM::allFunctions["functionWithtwoArgs"](varList);
ここで「スコープ」に入ります。スコープなしで関数を「実行」することはできません。特に、複数の仮想マシン (サンドボックスなど) を持つことができる埋め込みスクリプト言語では、Scope
型が必要になります。これにより、仮想呼び出しが次のように変更されます。
currentVM->allFunctions["functionName_twoArgs"].call(varList, currentVM->currentScope);
私は何度も続けることができますが、あなたは私の答えの要点を理解していると思います-C++は動的言語が好きではなく、ABIも変更される可能性が高いため、それに合わせて変更される可能性はほとんどありません。
うまくいけば、これはあなたを正しい方向に導くでしょう。