How to call opCall as template?
Frustrated
c1514843 at drdrb.com
Thu Jan 30 09:39:51 PST 2014
On Thursday, 30 January 2014 at 16:53:33 UTC, Namespace wrote:
> On Thursday, 30 January 2014 at 16:47:46 UTC, Frustrated wrote:
>> On Thursday, 30 January 2014 at 16:28:42 UTC, Namespace wrote:
>>> On Thursday, 30 January 2014 at 16:24:00 UTC, Stanislav
>>> Blinov wrote:
>>>>> void main() {
>>>>> F f;
>>>>> int i = f(3,4,5);
>>>>> float f_ = f!float(6, 7, 8);
>>>>> }
>>>>> ----
>>>>>
>>>>> Does not work, it fails with:
>>>>> Error: template instance f!float f is not a template
>>>>> declaration, it is a variable
>>>>
>>>> f.opCall!float(6, 7, 8);
>>>
>>> ... Yes, of course. But where is the sense to use opCall if I
>>> need to call it explicitly?
>>
>> Could you not use opDispatch? Not sure if you can templatize it
>> or not though...
>
> Example? I did not know how.
doesn't seem to work with templates, I suppose you could try and
add it as a feature request?
module main;
import std.stdio;
interface A
{
void foo();
static final New() { }
}
class B : A
{
void foo() { writeln("this is B.foo"); }
void opDispatch(string s, T)(int i) {
writefln("C.opDispatch('%s', %s)", s, i);
}
}
void main() {
B a = new B;
//a.foo();
a.test!int(3); // any *good* reason why this shouldn't work?
}
More information about the Digitalmars-d-learn
mailing list