digitalmars.D.learn - How to explicitly qualify my modules with the package
- Andy Little <andy servocomm.freeserve.co.uk> Mar 04 2007
- Daniel Keep <daniel.keep.lists gmail.com> Mar 04 2007
- Andy Little <andy servocomm.freeserve.co.uk> Mar 04 2007
Cant figure out how the package qualifier should work or what syntax I should
use to get it working.
E.g.
Where gcd is defined in sub-dir meta of this-file source dir as:
/*
"D:/projects/dmd/meta/mod_gcd.d"
//------------------------------------------------------
module meta.mod_gcd;
template gcd( T, T N, T D){
static if (D== 0){
static const T value = N;
}
else {
static const T value = gcd!(T,D, (N % D)).value;
}
}
//------------------------------------------------------
*/
static import std.stdio;
// works ok...
static if(1){
static const bool USE_PACKAGE_QUALIFIER =false;
//######################
import meta.mod_gcd;
//#####################
}
else {
/* in this path compilation fails with:
D:\Projects\dmd>dmd -c test1.d
test1.d(49): Error: template identifier gcd is not a member of meta
Error: no property 'value' for type 'int'
*/
static const int USE_PACKAGE_QUALIFIER =true;
//###########################
static import meta.mod_gcd;
//###########################
}
int main(char[][] args)
{
static if(USE_PACKAGE_QUALIFIER){
//##########################################
std.stdio.writefln("%d\n",meta.gcd!(int,8,64).value); //# line 49
//##########################################
}
else{
std.stdio.writefln("%d\n",gcd!(int,8,64).value);
}
return 0;
}
Mar 04 2007
Andy Little wrote:Cant figure out how the package qualifier should work or what syntax I should use to get it working. E.g. Where gcd is defined in sub-dir meta of this-file source dir as: /* "D:/projects/dmd/meta/mod_gcd.d" //------------------------------------------------------ module meta.mod_gcd; template gcd( T, T N, T D){ static if (D== 0){ static const T value = N; } else { static const T value = gcd!(T,D, (N % D)).value; } } //------------------------------------------------------ */ static import std.stdio; // works ok... static if(1){ static const bool USE_PACKAGE_QUALIFIER =false; //###################### import meta.mod_gcd; //##################### } else { /* in this path compilation fails with: D:\Projects\dmd>dmd -c test1.d test1.d(49): Error: template identifier gcd is not a member of meta Error: no property 'value' for type 'int' */ static const int USE_PACKAGE_QUALIFIER =true; //########################### static import meta.mod_gcd; //########################### } int main(char[][] args) { static if(USE_PACKAGE_QUALIFIER){ //########################################## std.stdio.writefln("%d\n",meta.gcd!(int,8,64).value); //# line 49
This fails because gcd is in the 'meta.mod_gcd' module. It would be like saying 'std.writefln'.//########################################## } else{ std.stdio.writefln("%d\n",gcd!(int,8,64).value); } return 0; }
-- Unlike Knuth, I have neither proven or tried the above; it may not even make sense. v2sw5+8Yhw5ln4+5pr6OFPma8u6+7Lw4Tm6+7l6+7D i28a2Xs3MSr2e4/6+7t4TNSMb6HTOp5en5g6RAHCP http://hackerkey.com/
Mar 04 2007
Daniel Keep Wrote: <...>This fails because gcd is in the 'meta.mod_gcd' module. It would be like saying 'std.writefln'.
Aha. Thanks for switching on the light ! regards Andy Little
Mar 04 2007








Andy Little <andy servocomm.freeserve.co.uk>