How to call opCall as template?
Namespace
rswhite4 at googlemail.com
Thu Jan 30 16:29:19 PST 2014
On Thursday, 30 January 2014 at 22:34:52 UTC, Frustrated wrote:
> On Thursday, 30 January 2014 at 21:33:09 UTC, Namespace wrote:
>>> I think for your example, the first case works fine using
>>> deduction.
>>
>> Sure but this is not always possible. ;)
>>
>> It seems that the problem occurs also with opIndex and so
>> probably with all op* methods. See:
>> http://forum.dlang.org/thread/bug-12043-3@https.d.puremagic.com%2Fissues%2F#post-lcegar:241ld2:241:40digitalmars.com
>
> Yes, because they all are implicit. It looks like you are
> calling
> a template. D could figure this out but I think it will end up
> having similar issues as >> has in C++. Is it an a templated op*
> on an object or is it template function call?
Explan it please with examples. I'm convinced that D is smarter
as C++ with the '>>' problem.
---
class Foo {
void opCall(size_t count) { }
}
Foo f = new Foo();
f(42); /// no template
----
----
class Foo {
void opCall(T)(size_t count) { }
}
Foo f = new Foo();
f!int(42); /// template
----
No ambiguity.
As far as I understand you, you mean something like this:
----
import std.stdio;
class Foo {
void opCall(size_t count) {
writeln("F()");
}
}
void f(T)(size_t count) {
writeln("f()");
}
void main()
{
Foo f = new Foo();
f(42);
}
----
which prints correctly "F()"
More information about the Digitalmars-d-learn
mailing list