|
Archives
D Programming
DD.gnu digitalmars.D digitalmars.D.bugs digitalmars.D.dtl digitalmars.D.dwt digitalmars.D.announce digitalmars.D.learn digitalmars.D.debugger C/C++ Programming
c++c++.announce c++.atl c++.beta c++.chat c++.command-line c++.dos c++.dos.16-bits c++.dos.32-bits c++.idde c++.mfc c++.rtl c++.stl c++.stl.hp c++.stl.port c++.stl.sgi c++.stlsoft c++.windows c++.windows.16-bits c++.windows.32-bits c++.wxwindows digitalmars.empire digitalmars.DMDScript electronics |
digitalmars.D - compile-time function in a class?
static keyword is already used by class.
and i hope
static static compiletimefunc()
{
}
can be recognized as a compiletime func
all i want is the name space protection from my class.
like if i want to do some code injection for my certain class
attributes. like
class abc
{
mixin(compiletimefunc(`membera,memberb`));
//pusedo code begines:
static static compiletimefunc(char[]members)
{
char []result;
//parse members to membernames
result~=3D`private:int _m_`~membernames~`;`;
result~=3D`public:int member(){return _m_`~membernames~`}`; //g=
etter
// loop
return result;
}
}
actually the compiletimefunc only used by the class abc, but now i can d=
o
is make it outside the class and polute the name space.
Mar 20 2007
You don't need to mark compile-time functions as static. Functions are only
evaluated at compile-time when they can't possibly be evaluated at run-time
(such as in mixin declarations/statements/expressions or as initializers of
static or global variables). E.g.:
char[] exampleFunc() { return "example"; }
char[] example = exampleFunc(); //This is global, so exampleFunc is executed at
compile-time
void func()
{
char[] example = exampleFunc(); //Not global or static, so run-time
}
Mar 20 2007
You don't need to mark compile-time functions as static. Functions Mar 20 2007
Charlie wrote:>> You don't need to mark compile-time functions as static. Functions are only evaluated at compile-time when they can't possibly be evaluated at run-time (such as in mixin declarations/statements/expressions or as initializers of static or global variables). E.g.: I love compile time functions, but saying 'are only evaluated when they cant be at run-time' leaves allot to be desired in terms of ease of use. How do i know for sure its evaluated at run time ? I could use a pragma , but it seems like we have to follow a very thin line to get there, it would be extremely nice if we had someway of explicitly saying 'call this at compile time'. exampleFunc(); maybe ? That way instead of guessing we're doing it at compile-time, we could be certain, and also let the programmer know whats going on , instead of him having to trace the same thin line. Charlie Tyler Knott wrote:You don't need to mark compile-time functions as static. Mar 20 2007
janderson wrote:Charlie wrote:>> You don't need to mark compile-time functions as static. Functions are only evaluated at compile-time when they can't possibly be evaluated at run-time (such as in mixin declarations/statements/expressions or as initializers of static or global variables). E.g.: I love compile time functions, but saying 'are only evaluated when they cant be at run-time' leaves allot to be desired in terms of ease of use. How do i know for sure its evaluated at run time ? I could use a pragma , but it seems like we have to follow a very thin line to get there, it would be extremely nice if we had someway of explicitly saying 'call this at compile time'. exampleFunc(); maybe ? That way instead of guessing we're doing it at compile-time, we could be certain, and also let the programmer know whats going on , instead of him having to trace the same thin line. Charlie Tyler Knott wrote:You don't need to mark compile-time functions as static. Mar 20 2007
That works well for functions that mixin code, but what if you just want to return an integer ? janderson wrote:janderson wrote:Charlie wrote:>> You don't need to mark compile-time functions as static. Functions are only evaluated at compile-time when they can't possibly be evaluated at run-time (such as in mixin declarations/statements/expressions or as initializers of static or global variables). E.g.: I love compile time functions, but saying 'are only evaluated when they cant be at run-time' leaves allot to be desired in terms of ease of use. How do i know for sure its evaluated at run time ? I could use a pragma , but it seems like we have to follow a very thin line to get there, it would be extremely nice if we had someway of explicitly saying 'call this at compile time'. exampleFunc(); maybe ? That way instead of guessing we're doing it at compile-time, we could be certain, and also let the programmer know whats going on , instead of him having to trace the same thin line. Charlie Tyler Knott wrote:You don't need to mark compile-time functions as static. Mar 20 2007
class test
{
static char[] c(){return "a";}
int a;
class b
{
mixin(c());
}
}
void main()
{
}
don't u think my example should compile?
i don't violate any thing from evaluating func c from compile-time
Mar 20 2007
Davidl wrote: Mar 20 2007
Davidl wrote: Mar 20 2007
class test
{
template c(){ static char[] c(){return "int k;";}}
int a;
class b
{
mixin(c());
}
}
void main()
{
}
above is a great work around for me, i get name space protect my compile
time func,
thx for ur hint of what actually compile-time func could be
Mar 20 2007
|