RTTI を有効にしてコンパイルされたクラスを使用して、ユーザーが式を定義できるようにするというタスクに直面しています。簡単に言いますと。
TAnimal = class(TPersistent)
private
fWeight : Double;
fHeight : Double;
fName : string;
published
property Weight : Double read fWeight write fWeight;
property Height : Double read fHeight write fHeight;
property Name : string read fName write fName;
end;
そして、指定された式で動物を評価するルーチンがあります
function EvaluateAnimal(const animal : TAnimal; expression : string) : Double;
begin
//Result := Turn expression to evaluation and give the result
end;
ユーザー表現は
(TAnimal.Weight * TAnimal.Height)/(TAnimal.Weight + TAnimal.Height)
これで、RTTI コンテキストを使用して TAnimal を取得し、動物の身長と体重の値を取得できます。ただし、ユーザーが提供した式をどのように評価できますか??
アプリケーションの起動時と実行時にユーザー式を準備するために使用できるメカニズムはありますか? 動物のインスタンスを送信して値を取得するだけです。ユーザーはいつでも式を自由に変更でき、アプリケーションは式を評価する必要があります。
Delphi XE3 を使用しています。