digitalmars.D.learn - casting & templates
- =?iso-8859-1?Q?Robert_M._M=FCnch?= (17/17) Jan 31 2016 I have:
- Chris Wright (17/26) Jan 31 2016 This expands to:
I have:
class OperatorV(T) : Value {
T impl;
this(T impl) {
this.impl = impl;
}
...
and use it like this: makeOperator((IntV a, IntV b) => new IntV(a.num +
b.num));
Now I want to do: opWord.get() returns a Value
OperatorV *op = cast(OperatorV*)(opWord.get());
and get: Error: class app.OperatorV(T) is used as a type
Hmm... any idea? Don't know how to carry the template stuff around.
--
Robert M. Münch
http://www.saphirion.com
smarter | better | faster
Jan 31 2016
On Sun, 31 Jan 2016 19:59:01 +0100, Robert M. Münch wrote:
I have:
class OperatorV(T) : Value {
T impl;
this(T impl) {
this.impl = impl;
}
...
This expands to:
template OperatorV(T) {
class OperatorV {
...
}
}
If you're just typing `OperatorV` with no template arguments, you're
referring to the template itself.
There's not necessarily any relationship between two instantiations of a
template with different arguments. You could write it so that OperatorV!
int and OperatorV!string have entirely different sets of methods,
constructors, and fields.
Because of that, the compiler doesn't create a base class for you
automatically. But you can do it yourself:
class BaseOperator {} // or interface, or abstract class
class OperatorV(T) : BaseOperator {}
Jan 31 2016








Chris Wright <dhasenan gmail.com>