digitalmars.D.learn - template operator overload
- Namespace (18/18) Nov 27 2013 Just out of curiosity: Is it possible to call an overloaded
- Shammah Chancellor (4/25) Nov 27 2013 You need to simply use template deduction, and cast the parameter to
- Namespace (8/33) Nov 27 2013 Inside the brackets I want an int. But I also want an extra type.
- bearophile (5/14) Nov 27 2013 I think that's not supported by D syntax. So if you want that,
Just out of curiosity: Is it possible to call an overloaded
operator with a template type?
----
import std.stdio;
struct A {
void opIndex(T)(size_t index) {
}
}
void main() {
A a;
a.opIndex!int(0); // [1]
a!int[0]; // [2]
}
----
[1] works, but [2] fails.
How can I call opIndex with bracket syntax and a typename? Or is
this not possible?
Nov 27 2013
On 2013-11-27 16:07:50 +0000, Namespace said:
Just out of curiosity: Is it possible to call an overloaded operator
with a template type?
----
import std.stdio;
struct A {
void opIndex(T)(size_t index) {
}
}
void main() {
A a;
a.opIndex!int(0); // [1]
a!int[0]; // [2]
}
----
[1] works, but [2] fails.
How can I call opIndex with bracket syntax and a typename? Or is this
not possible?
You need to simply use template deduction, and cast the parameter to
what you're wanting to use between the brackets.
a[cast(int)0] (although zero is already an int);
Nov 27 2013
On Wednesday, 27 November 2013 at 17:25:49 UTC, Shammah Chancellor wrote:On 2013-11-27 16:07:50 +0000, Namespace said:Inside the brackets I want an int. But I also want an extra type. E.g. ---- A a; a!string[4]; ----Just out of curiosity: Is it possible to call an overloaded operator with a template type? ---- import std.stdio; struct A { void opIndex(T)(size_t index) { } } void main() { A a; a.opIndex!int(0); // [1] a!int[0]; // [2] } ---- [1] works, but [2] fails. How can I call opIndex with bracket syntax and a typename? Or is this not possible?You need to simply use template deduction, and cast the parameter to what you're wanting to use between the brackets. a[cast(int)0] (although zero is already an int);
Nov 27 2013
Namespace:
void main() {
A a;
a.opIndex!int(0); // [1]
a!int[0]; // [2]
}
----
[1] works, but [2] fails.
How can I call opIndex with bracket syntax and a typename? Or
is this not possible?
I think that's not supported by D syntax. So if you want that,
you need to use a syntax like "a.at!int(0)".
Bye,
bearophile
Nov 27 2013
On Wednesday, 27 November 2013 at 17:47:13 UTC, bearophile wrote:Namespace:Too bad. Would have been really awesome.void main() { A a; a.opIndex!int(0); // [1] a!int[0]; // [2] } ---- [1] works, but [2] fails. How can I call opIndex with bracket syntax and a typename? Or is this not possible?I think that's not supported by D syntax. So if you want that, you need to use a syntax like "a.at!int(0)". Bye, bearophile
Nov 27 2013
On Wednesday, 27 November 2013 at 18:40:09 UTC, Namespace wrote:Too bad. Would have been really awesome.It is pretty hard to define within common grammar rules because of implicit nature of operators.
Nov 27 2013









"Namespace" <rswhite4 googlemail.com> 