TMyStringHelperの代案について


tomo  2016-09-20 15:39:00  No: 48329  IP: 192.*.*.*

TStringHelperを拡張してTMyStringHelperを定義することは不可能というのは有名?な話ですが、では実際にどうやって自作のユーティリティ関数を定義しているんでしょうか?

文法的な解説やこういう発想、アイデアもあるということではなく、
皆さんの実際の開発でどうやってString, Integer等に対する汎用的な便利関数を蓄積しているのか教えてください。

自分はそのへんがふらついていて適当な場所にコードをコピペしたりという感じになってしまっていて
いい加減スパッと統一したいのですがなかなかこれと言った方法がなく困っています。

よろしくお願いします。

編集 削除
通りすがり  2016-09-20 18:49:23  No: 48330  IP: 192.*.*.*

直接的な回答ではないのですが、逆に型を分けてしまう、というアプローチをとっています。
たとえば月(1-12)はもちろんIntegerでも表現可能ですが、これを部分範囲型として定義し、
これにrecord helperを用意します。

type
  TMonth = 1..12;
  TMonthHelper = record helper for TMonth
  public
    function GetName: String;
  end;

こんな感じです。もちろん万能ではないです。

編集 削除
nagamachi  2016-09-21 21:50:41  No: 48331  IP: 192.*.*.*

tomoさんこんにちは。
実際に使ってはいませんが、こんな感じならできます。

type
  MyString  = type string;

type
  TMyStrigHelper  = record helper for MyString
    function Double:  string;
  end;

function  TMyStrigHelper.Double:  string;
begin
  result  :=  self + self;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  wStr    : MyString;
  s       : string;
begin
  wStr    :=  'A000';
  ShowMessage(wStr.Double);
  s       :=  'A111';
  ShowMessage(MyString(s).Double);
end;

編集 削除