compile time method check
Weed
resume755 at mail.ru
Sat Dec 27 01:40:48 PST 2008
Bill Baxter пишет:
> 2008/12/27 Weed <resume755 at mail.ru>:
>> Simen Kjaeraas пишет:
>>> On Fri, 26 Dec 2008 20:15:30 +0100, Weed <resume755 at mail.ru> wrote:
>>>
>>>> Can I at compile time check whether there is a facility method
>>>> (toString(), for example)?
>>>>
>>>> Today I wrote:
>>>>
>>>> static if ( __traits(isArithmetic, Element) ) {
>>>> ret ~= toString(this[i,j]) ~ "\t";
>>>> } else {
>>>> ret ~= this[i,j].toString ~ "\t";
>>>> }
>>>>
>>>> It works but it is wrong
>>> I believe this works:
>>>
>>> static if (is(typeof(this[i,j].toString))) {
>>> ret ~= this[i,j].toString;
>>> } else {
>>> ret ~= toString(this[i,j]);
>>> }
>>>
>> No, this cause error:
>>
>> toString () does not match parameter types (float)
>>
>> ( condition is always resolved to else {...} )
>
> That's because float's don't have a toString method. So it should be
> picking the else{} case.
>
> If you try it with something where this[i,j] returns an Object or
> struct with a toString, then it should pick the 'if' branch.
There was confusion between this.toString () and std.stdio.toString ()
Fixed, thanks!
More information about the Digitalmars-d-learn
mailing list