5

プロジェクトに実装された関数がありますMyFunc(int, double, string)。たとえば、文字列表現を持つ必要なパラメータを使用してこの関数を呼び出すにはどうすればよいですか?

std::string str = "MyFunc(2, 3.12, \"Lemon Juice\")";

そして、標準関数についてはどうでしょうか。たとえば、持っているとどのように呼ぶtime()ことができstd::string "time()"ますか?


わかりました、これがより詳細なタスクです。私はmap <string, Data> Dataたくさんの子供を持つクラスラッパーを持っています。メソッドを呼び出すと、子クラスの内部データに応じData.GetValue()て、が返されます。std::string子の1つは、の文字​​列表現、もう1つはの文字列表現、最後の子は現在の日付と時刻のData文字列表現を返す必要があります。ここに問題があります-子供の1人から情報を取得するための標準関数を呼び出す方法がわかりません。intdoublectime()Data

4

3 に答える 3

3

一般に、ソースが文字列に含まれているC++でコードを実行することはできません。おそらく、これに対する最も説得力のある動機は、C ++実装が、コードが実行されるマシン上にC ++コンパイラーを持っている必要がないようにすることですが、それだけではありません。

あなたは特定の場合のためにそれをすることができるかもしれません。それは次のようになります。

プラットフォーム固有、例:

  • ソースを定型文にまとめてから、コンパイラを外部から呼び出すか、リンクするか、プログラムに埋め込みます。これにより、プログラムまたはライブラリが提供されます。
  • その新しいプログラムを外部で実行するか、そのライブラリに対して動的にリンクします。

入力固有、例:

  • 完全なC++コンパイラを必要とせずに、引数としてリテラルを使用して、特定の既知の関数への関数呼び出しを比較的簡単に解析できます。引数の値を変数に取り出し、関数を呼び出します。ただし、これを行う場合は、C ++関数呼び出しのように見える形式よりも、文字列に対してより簡単に解析可能な形式を指定できます。

タスクに次のいずれかの文字列があるように聞こえます。

  • の表現int
  • の表現double
  • 日付と時刻の表現。

この文字列で何をしたいのかは言いませんが、それが何であれ、おそらく(a)文字列を調べて、3つのうちどれであるかを調べ、(b)その形式に適した処理を行う必要があります。より良いことに、3つの戻り値のどちらに関係なく、派生クラスに同じ表現を返す責任を与えることができGetValue()ます。たとえば、本当に必要なのが1970年からの秒数である場合は、GetSecondsSinceEpoc関数を追加し、クラスごとに異なる方法で実装します。

于 2012-06-18T10:44:30.900 に答える
1

他の人が述べているように、C++自体はそれを行うことができません。ただし、外部フレームワークが役立ちます。

ROOT(CERNで使用)は、インタープリターとともにC++のリフレクションを提供します。コード内からC++で記述されたメソッド呼び出しまたはマクロを実行/解釈できるようになります。

于 2012-06-18T11:38:58.283 に答える
0

C++を使用してそれを行うことはできません。

于 2012-06-18T10:34:35.973 に答える