Re: Some help on Mixin Template at Class level.

2011-05-23 Thread Andrej Mitrovic
On 5/23/11, Matthew Ong  wrote:
> Someone also pointed out:
>
> template mydef(string name){
> }
>
> mixin(mydef!("abc"));
>
> The above are NOT shown up left hand side of that when we click on
> Language Reference

You're probably looking for this:

http://www.digitalmars.com/d/2.0/mixin.html


Re: Some help on Mixin Template at Class level.

2011-05-23 Thread Matthew Ong

On 5/23/2011 2:17 AM, Simen Kjaeraas wrote:

On Sat, 21 May 2011 11:40:22 +0200, Matthew Ong  wrote:


Using your code I have this error:

src\Sample.d(16): Error: undefined identifier btype, did you mean
template AType(string name,U,alias V)?
src\Sample.d(16): Error: mixin AType!("ClassB",string,_error_) does
not match template declaration AType(string name,U,alias V)

Could you please ensure it is compilable code and so that I can test
the template shown by you.


Sorry about that.


string ATypeGenerator( string name ) {
return "class " ~ name ~ " : ClassC {
private:
U value;
public:
this(){}
void print(){}
mixin V;
}";
}

mixin template AType( string name, U, alias V ) {
mixin( ATypeGenerator( name ) );
}

class ClassC {}

mixin template btype() {
void someFunction() {}; // Content of a class.
}

mixin AType!("ClassB", string, btype);

void main() {
ClassC r = new ClassB();
}


Thanks simen. I have solve that issue.

Someone also pointed out:

template mydef(string name){
}

mixin(mydef!("abc"));

The above are NOT shown up left hand side of that when we click on 
Language Reference

http://www.digitalmars.com/d/2.0/lex.html
And also here.
http://www.digitalmars.com/d/2.0/comparison.html

not the same as:
mixin template mydeff(T){
...
}

mixin mydeff!(string);

Some centralized documentation is needed for D.

--
Matthew Ong
email: on...@yahoo.com



Re: Some help on Mixin Template at Class level.

2011-05-22 Thread Simen Kjaeraas

On Sat, 21 May 2011 11:40:22 +0200, Matthew Ong  wrote:


Using your code I have this error:

src\Sample.d(16): Error: undefined identifier btype, did you mean  
template AType(string name,U,alias V)?
src\Sample.d(16): Error: mixin AType!("ClassB",string,_error_) does not  
match template declaration AType(string name,U,alias V)


Could you please ensure it is compilable code and so that I can test the  
template shown by you.


Sorry about that.


string ATypeGenerator( string name ) {
return "class " ~ name ~ " : ClassC {
private:
U value;
public:
this(){}
void print(){}
mixin V;
}";
}

mixin template AType( string name, U, alias V ) {
mixin( ATypeGenerator( name ) );
}

class ClassC {}

mixin template btype() {
void someFunction() {}; // Content of a class.
}

mixin AType!("ClassB", string, btype);

void main() {
ClassC r = new ClassB();
}

--
  Simen


Re: Some help on Mixin Template at Class level.

2011-05-21 Thread Matthew Ong

On 5/21/2011 5:12 PM, Simen Kjaeraas wrote:

On Sat, 21 May 2011 10:54:54 +0200, Matthew Ong  wrote:


mixin template AType(alias T, U, alias V){
class T : ClassC { // Class level Template


This gives you a class called T. You seem to want it to have the name
you pass as a string, in which case you have to use string mixins.


private:
U value;
public:
this(){}
void print(){}
mixin V;
} // End Class
}

class ClassC {}

mixin template btype() {
void someFunction() {}; // Content of a class.

}

mixin AType!("ClassB", string, btype);

void main() {
ClassC r = new ClassB();
}


As mentioned above, in order to use the name from the template parameter
you need to use string mixins. Here is how I would do it:

string ATypeGenerator( string name ) {
return "class " ~ name ~ " : ClassC {
private:
U value;
public:
this(){}
void print(){}
mixin V;
}";
}

mixin template AType( string name, U, alias V ) {
mixin( ATypeGenerator( name ) );
}

mixin AType!("ClassB", string, btype);

void main() {
ClassC r = new ClassB();
}



Hi, Thanks for the respond.
I am really new to D.
Using your code I have this error:

src\Sample.d(16): Error: undefined identifier btype, did you mean 
template AType(string name,U,alias V)?
src\Sample.d(16): Error: mixin AType!("ClassB",string,_error_) does not 
match template declaration AType(string name,U,alias V)


Could you please ensure it is compilable code and so that I can test the 
template shown by you.


--
Matthew Ong
email: on...@yahoo.com



Re: Some help on Mixin Template at Class level.

2011-05-21 Thread Simen Kjaeraas

On Sat, 21 May 2011 10:54:54 +0200, Matthew Ong  wrote:


mixin template AType(alias T, U, alias V){
class T : ClassC { // Class level Template


This gives you a class called T. You seem to want it to have the name
you pass as a string, in which case you have to use string mixins.


private:
 U value;
public:
 this(){}
 void print(){}
 mixin V;
} // End Class
}

class ClassC {}

mixin template btype() {
 void someFunction() {}; // Content of a class.

}

mixin AType!("ClassB", string, btype);

void main() {
 ClassC r = new ClassB();
}


As mentioned above, in order to use the name from the template parameter
you need to use string mixins. Here is how I would do it:

string ATypeGenerator( string name ) {
return "class " ~ name ~ " : ClassC {
private:
U value;
public:
this(){}
void print(){}
mixin V;
}";
}

mixin template AType( string name, U, alias V ) {
mixin( ATypeGenerator( name ) );
}

mixin AType!("ClassB", string, btype);

void main() {
ClassC r = new ClassB();
}


--
Simen