simple (I think) eponymous template question ... what is proper idimatic way ?
H. S. Teoh
hsteoh at quickfur.ath.cx
Tue Aug 17 18:27:48 UTC 2021
On Tue, Aug 17, 2021 at 06:11:56PM +0000, james.p.leblanc via Digitalmars-d-learn wrote:
> Evening All,
>
> Eponymous templates allow a nice calling syntax. For example, "foo"
> here can be called without needing the exclamation mark (!) at calling
> sites. We see that foo is restricting a, and b to be of the same type
> ... so far, so good.
>
> auto foo(T)(T a, T b) { ... }
>
> Now, suppose I need to restrict "T" only certain subsets of variable
> types.
This is exactly what "signature constraints" are for. For example:
auto foo(T)(T a, T b)
if (is(T == string)) // <--- this is a signature constraint
{
... // deal with strings here
}
auto foo(T)(T a, T b)
if (is(T == int)) // you can overload on signature constraints
{
... // deal with ints here
}
auto foo(T)(T a, T b)
if (is(T == float) || is(T == double)) // you can use complex conditions
{
... // deal with floats or doubles here
}
Be aware that a signature constraint failure is not an error: the
compiler simply skips that overload of the function. So if you make a
mistake in a sig constraint, it may *always* fail, and the compiler may
try instead to instantiate a completely unintended overload and generate
an error that may have nothing to do with the actual problem.
T
--
Give a man a fish, and he eats once. Teach a man to fish, and he will sit forever.
More information about the Digitalmars-d-learn
mailing list