digitalmars.D - Exporting Templates in Static Libraries
- lkd (3/3) Mar 11 2005 Hi, I'm wondering is it possible to export templates in an static librar...
- Ben Hinkle (6/10) Mar 12 2005 Do you mean a template instance? A template itself is not stored in obje...
- lkd (49/60) Mar 12 2005 Yeah, I'm just basically making a simple array template to Redim 2D, 3D,...
- Ben Hinkle (11/19) Mar 12 2005 Not as written. The template body has to be imported as well (by analogy...
- lkd (2/22) Mar 13 2005 Had a feeling that wouldn't work. I'll just keep the source. Thanks.
Hi, I'm wondering is it possible to export templates in an static library using the export commands? Do I need a factory function like a class does? Thanks
Mar 11 2005
"lkd" <lkd_member pathlink.com> wrote in message news:d0ta3g$rg6$1 digitaldaemon.com...Hi, I'm wondering is it possible to export templates in an static library using the export commands? Do I need a factory function like a class does? ThanksDo you mean a template instance? A template itself is not stored in object code. Assuming you do mean template instance I would guess the rules are the same as if the code hadn't been in a template. But I don't know for sure. Can you give more details about what you are trying to do?
Mar 12 2005
In article <d0vblr$4ha$1 digitaldaemon.com>, Ben Hinkle says..."lkd" <lkd_member pathlink.com> wrote in message news:d0ta3g$rg6$1 digitaldaemon.com...Yeah, I'm just basically making a simple array template to Redim 2D, 3D, and 4D arrays. I'm trying to compile the following code into a library and use a module that just has the interface to access it. Source: module arr; template Arr(T) { //1D Array T[] Redim(int elems) {T arr[] = new T[elems]; return arr;} //2D Array T[][] Redim(int rows, int cols) { T arr[][]; arr.length = rows; for(int i = 0; i < rows; i++) { arr[i].length = cols; } return arr; } //3D Array T[][][] Redim(int x, int y, int z) { T arr[][][]; arr.length = x; for(int i = 0; i < y; i++) { arr[i].length = y; for(int j = 0; j < z; j++) { arr[i][j].length = z; } } return arr; } } Interface: module arr; template Arr(T) { //1D Array T[] Redim(int elems); //2D Array T[][] Redim(int rows, int cols); //3D Array T[][][] Redim(int x, int y, int z); } Will this work?Hi, I'm wondering is it possible to export templates in an static library using the export commands? Do I need a factory function like a class does? ThanksDo you mean a template instance? A template itself is not stored in object code. Assuming you do mean template instance I would guess the rules are the same as if the code hadn't been in a template. But I don't know for sure. Can you give more details about what you are trying to do?
Mar 12 2005
[snip]Do you mean a template instance? A template itself is not stored in object code. Assuming you do mean template instance I would guess the rules are the same as if the code hadn't been in a template. But I don't know for sure. Can you give more details about what you are trying to do?Yeah, I'm just basically making a simple array template to Redim 2D, 3D, and 4D arrays. I'm trying to compile the following code into a library and use a module that just has the interface to access it.Will this work?Not as written. The template body has to be imported as well (by analogy in C++ a template has to be in the header files) so that the user's code can instatiate the template. If you don't want to expose the template body you can either instantiate the template with some types and expose those instances or you can write some backend routines that aren't exposed and have the exposed template call those routines. I think the simplest solution for your example is to leave the template as it is and import the source and forget about the interface module. That is keeping with D's single-source model unless there are reasons to go to a body/interface model. -Ben
Mar 12 2005
In article <d0vu8f$na8$1 digitaldaemon.com>, Ben Hinkle says...Had a feeling that wouldn't work. I'll just keep the source. Thanks.[snip]Do you mean a template instance? A template itself is not stored in object code. Assuming you do mean template instance I would guess the rules are the same as if the code hadn't been in a template. But I don't know for sure. Can you give more details about what you are trying to do?Yeah, I'm just basically making a simple array template to Redim 2D, 3D, and 4D arrays. I'm trying to compile the following code into a library and use a module that just has the interface to access it.Will this work?Not as written. The template body has to be imported as well (by analogy in C++ a template has to be in the header files) so that the user's code can instatiate the template. If you don't want to expose the template body you can either instantiate the template with some types and expose those instances or you can write some backend routines that aren't exposed and have the exposed template call those routines. I think the simplest solution for your example is to leave the template as it is and import the source and forget about the interface module. That is keeping with D's single-source model unless there are reasons to go to a body/interface model. -Ben
Mar 13 2005