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