www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - D's templates now seem weak to me...

reply Ben Phillips <Ben_member pathlink.com> writes:
According to the docs, "Templates cannot be used to add non-static members or
functions to classes. For example: [...]". Why? This is just plain stupid in my
opinion
Feb 20 2006
next sibling parent reply Stewart Gordon <smjg_1998 yahoo.com> writes:
Ben Phillips wrote:
 According to the docs, "Templates cannot be used to add non-static members or
 functions to classes. For example: [...]". Why? This is just plain stupid in my
 opinion

Because at the time of compiling the module, one cannot be sure what types it will be called on, and so it wouldn't be able to generate the vtbl. However, it ought to be possible to do it on private and final member functions, since such things will never be overridden and so don't need to be included in the vtbl. Stewart. -- -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/M d- s:- C++ a->--- UB P+ L E W++ N+++ o K- w++ O? M V? PS- PE- Y? PGP- t- 5? X? R b DI? D G e++>++++ h-- r-- !y ------END GEEK CODE BLOCK------ My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit.
Feb 20 2006
parent reply Ben Phillips <Ben_member pathlink.com> writes:
In article <dtcr4g$254q$1 digitaldaemon.com>, Stewart Gordon says...
Ben Phillips wrote:
 According to the docs, "Templates cannot be used to add non-static members or
 functions to classes. For example: [...]". Why? This is just plain stupid in my
 opinion

Because at the time of compiling the module, one cannot be sure what types it will be called on, and so it wouldn't be able to generate the vtbl. However, it ought to be possible to do it on private and final member functions, since such things will never be overridden and so don't need to be included in the vtbl.

That makes sense. However, couldn't this be fixed by just not compiling the template functions when creating a *.lib? The end user has to import the appropriate files anyways so it should be possible for the compiler to delay compilation of the functions until an executable is made (kind of like C++ though C++ uses preprocessor #includes)
Feb 20 2006
parent Stewart Gordon <smjg_1998 yahoo.com> writes:
Ben Phillips wrote:
 In article <dtcr4g$254q$1 digitaldaemon.com>, Stewart Gordon says...
 Ben Phillips wrote:
 According to the docs, "Templates cannot be used to add non-static members or
 functions to classes. For example: [...]". Why? This is just plain stupid in my
 opinion

types it will be called on, and so it wouldn't be able to generate the vtbl. However, it ought to be possible to do it on private and final member functions, since such things will never be overridden and so don't need to be included in the vtbl.

template functions when creating a *.lib? The end user has to import the appropriate files anyways so it should be possible for the compiler to delay compilation of the functions until an executable is made (kind of like C++ though C++ uses preprocessor #includes)

What if different modules of an application call the template function with different template arguments? The vtbl needs to be known when compiling each module. And so each module would have a different vtbl for the same class, which would totally screw up the program. Stewart. -- -----BEGIN GEEK CODE BLOCK----- Version: 3.1 GCS/M d- s:- C++ a->--- UB P+ L E W++ N+++ o K- w++ O? M V? PS- PE- Y? PGP- t- 5? X? R b DI? D G e++>++++ h-- r-- !y ------END GEEK CODE BLOCK------ My e-mail is valid but not my primary mailbox. Please keep replies on the 'group where everyone may benefit.
Feb 21 2006
prev sibling parent reply Sean Kelly <sean f4.ca> writes:
Ben Phillips wrote:
 According to the docs, "Templates cannot be used to add non-static members or
 functions to classes. For example: [...]". Why? This is just plain stupid in my
 opinion

It's also not entirely true. Templates cannot be used to add virtual members or functions to classes, but they can add (implicitly final) non-static membes to classes. This is the same as in C++. Sean
Feb 20 2006
parent Ben Phillips <Ben_member pathlink.com> writes:
In article <dtd2gb$2dcn$1 digitaldaemon.com>, Sean Kelly says...
Ben Phillips wrote:
 According to the docs, "Templates cannot be used to add non-static members or
 functions to classes. For example: [...]". Why? This is just plain stupid in my
 opinion

It's also not entirely true. Templates cannot be used to add virtual members or functions to classes, but they can add (implicitly final) non-static membes to classes. This is the same as in C++. Sean

Ah... thanks! The info you and Oskar provided helped me a lot!
Feb 20 2006