www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Implicit Template Properties - rules change proposal

reply Tom S <h3r3tic remove.mat.uni.torun.pl> writes:
I often find myself creating templates like:

// ----
tempate doSomethingImpl(T) {
	template loop(int i) {
		....
		alias ... loop;
	}

	alias loop!(0) res;
}

template doSomething(T) {
	alias doSomethingImpl!(T).res doSomething;
}
// ----

Clearly the second template is redundant and exists there only to make 
the usage pattern easier.
My proposal is to change the rules for implicit template properties

from:
"If a template has exactly one member in it, and the name of that member 
is the same as the template name, that member is assumed to be referred 
to in a template instantiation"

to:
"If a template has exactly one *public* member in it, (...) "


Then, the template would look like:

// ----
tempate doSomething(T) {
	private template loop(int i) {
		....
		alias ... loop;
	}

	alias loop!(0) doSomething;
}
// ----



Opinions ?


-- 
Tomasz Stachowiak  /+ a.k.a. h3r3tic +/
Jun 20 2006
next sibling parent Frank Benoit <keinfarbton nospam.xyz> writes:
 Opinions ?

Yes, it should always be possible to write the things easy. Having the restriction of only one member for such a template seams needless. Your proposal opens another door for easier code with less complexity.
Jun 20 2006
prev sibling parent Sean Kelly <sean f4.ca> writes:
Tom S wrote:
 I often find myself creating templates like:
 
 // ----
 tempate doSomethingImpl(T) {
     template loop(int i) {
         ....
         alias ... loop;
     }
 
     alias loop!(0) res;
 }
 
 template doSomething(T) {
     alias doSomethingImpl!(T).res doSomething;
 }
 // ----
 
 Clearly the second template is redundant and exists there only to make 
 the usage pattern easier.
 My proposal is to change the rules for implicit template properties
 
 from:
 "If a template has exactly one member in it, and the name of that member 
 is the same as the template name, that member is assumed to be referred 
 to in a template instantiation"
 
 to:
 "If a template has exactly one *public* member in it, (...) "
 
 
 Then, the template would look like:
 
 // ----
 tempate doSomething(T) {
     private template loop(int i) {
         ....
         alias ... loop;
     }
 
     alias loop!(0) doSomething;
 }
 // ----
 
 Opinions ?

This would be awesome. Sean
Jun 20 2006