Template function that accept strings and array of strings

Vlad Levenfeld via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Jul 15 15:49:39 PDT 2015


On Wednesday, 15 July 2015 at 21:57:50 UTC, badlink wrote:
> Hello, I can't figure how to write a template function that 
> accept either strings or array of strings.
>
> This is my current code:
>
> bool hasItemParent(T)(const(char)[] itemId, const(T)[] parentId)
> if (is(typeof(T) == char) || (isArray!T && is(typeof(T[]) == 
> char)))
> {...}
>
> I used const(T)[] because I'd like to accept immutable and 
> mutable strings.
> But calling it with an immutable string generate this error:
>
> Error: template cache.MetadataCache.hasItemParent cannot deduce 
> function from argument types !()(string, string), candidates 
> are:
> cache.MetadataCache.hasItemParent(T)(const(char)[] itemId, 
> const(T)[] parentId) if (is(typeof(T) == char))
>
> Any suggestions ?

T is already a type, so typeof(T) is an error, which makes the 
constraint fail.

Try
hasItemParent(T)(const(char)[] itemId, const(T)[] parentId)
if (is(T == char) || is (T == char[]))

at least I think that's what you meant. typeof(anything[]) will 
never == char.


More information about the Digitalmars-d-learn mailing list