Being dim #2: No generic global procedures

The other day I was writing some unit tests and needed some helper functions to look up some array elements of in arrays of different base types. I had several overloaded functions to do the job, like this:

function IndexOf(const Item: string; const A: array of string): Integer; overload;
function IndexOf(const Item: Integer; const A: array of Integer): Integer; overload;

Oh, I thought, generics are a way round this, so I replaced the overloaded functions with something like

function IndexOf<T>(const Item: T; const A: array of T): Integer;

only to be get compiler error 2530: Type parameters not allowed on global procedure or function. Now, I didn't know that and I'm sharing it in case some of you didn't either.

And the solution? I sorted it by using a static class to hold the code, i.e.

type
  TSomeClass = class(TObject)
  public
    class function IndexOf<T>(const Item: T; const A: array of T): Integer;
  end;

This works fine.

I've not provided implementation details of any of this code since the details are not important in this context.

Comments

  1. This comment is not specific to this particular blog entry. However, I just want you to know how much I appreciate your blogs and your web site.

    Max

    ReplyDelete
  2. Thanks Max - much appreciated.

    Peter

    ReplyDelete
  3. Anonymous2:34 pm

    still the same in XE5

    strange limitation - I wonder if there's a "good reason" for it...

    ReplyDelete
  4. Dunno why, or even if there's a good reason. Maybe someone is trying to stop us using procedural code!

    ReplyDelete

Post a Comment

Comments are very welcome, but please be aware that I moderate all comments, so there will be a delay before your comment appears.

Advertising spam and the rare abusive, hateful or racist comments will be blocked and reported.

Finally, should you have a query about, or a bug report for, one of my programs or libraries please use the relevant issue tracker rather than posting a comment to report it.

Thanks

Popular posts from this blog

Initialising dynamic arrays

Deleting elements from a dynamic array

New Array Utilities Library Unit released