Function accepts const ubyte[], const char[], immutable ubyte[], immutable char[]
Tobi G. via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jan 10 03:13:00 PST 2016
On Sunday, 10 January 2016 at 10:10:46 UTC, zabruk70 wrote:
> Hello.
>
> 1st Novice question:
>
> i want function, operates sometimes with char[], sometimes with
> ubyte[].
> internally it works with ubyte.
> i can use overloading:
>
> void myFunc(ubyte[] arg) {...};
> void myFunc(char[] arg) { ubyte[] arg2 = cast(ubyte[]) arg; ...}
>
> It is OK. But i want 2 params (arg1, arg2),
> so i need write 4 overloading functions.
>
> I fill templated needed, can anybody show me the way?
No you actually don't have to write all possible overloads.
For example:
(surely not the best solution)
import std.traits;
ubyte[] myFuncImpl(ubyte[] a, ubyte[] b)
{
return a ~ b;
}
ubyte[] myFunc(T1,T2)(T1[] a, T2[] b)
if(is(Unqual!T1 == ubyte) || is(Unqual!T1 == char)
|| is(Unqual!T2 == ubyte) || is(Unqual!T2 == char))
{
return myFuncImpl(cast(ubyte[]) a, cast(ubyte[]) b);
}
> And 2nd question:
>
> what if additionally to written above, function shuld return
> ubyte[] or char[] ?
> can compiler guess what return type need from code?
No. Your function call signature would be completely the same..
The way to do this is to make the function a template and pass
the return parameter to it.
So you're able to do something like:
auto val = myReturnFunc!int();
togrue
More information about the Digitalmars-d-learn
mailing list