On Tuesday, 11 December 2012 at 07:50:10 UTC, js.mdnq wrote:
On Tuesday, 11 December 2012 at 07:15:38 UTC, Zhenya wrote:
I'm sorry for my english.
I know that D != Python and my example don't need
any RTTI.
D has alias this feature.My example shows that we can use
alias this with types.
And I just want use this:
struct Type(T)
{
alias T m_type;
alias m_type this;
}
int main()
{
Type!int Int;
Int i;//should compile by definition of alias this
}
My I ask, why not just use int directly?
I'm not proficient enough with D yet but it seems to me that
the example does not make sense.
alias T m_type;
alias m_type this;
should be equivalent to
alias T this;
which, in some sense makes struct Type(T) equal to T... which
is what you are thinking, I think.
But! I also believe that structs are meant as value types and
are addressable.
So when you do
Int i; you are essentially doing something like
int x;
x i;
which makes no sense.
If you do this instead,
alias Type!int Int;
Int i;
then it will compile, of course.
But your way, when you do Int x; you are specifically trying to
create a instance of an object. Yet you are not wanting it to
be an object and I'm not sure what you are wanting x to be.
(another type? a type of a type?)
In my example Int is value of Type!int.
When I write
Int i;
If Int had not alias this it really would not have sense,because
type expected
instead of 'Int'.But Int have alias this 'int',and can be
replaced by it.
My reason is simple:
Operators are functions.But if I want declare some struct like
std.TypeTuple
I will need opSlice that return type.
It is impossible.
But if my example compiled,I could return value,that can be used
as type.
It's something like Andrei's Type2Type.