digitalmars.D - Specialized TemplateIdentifer for template parameters
Hi, all.
I made following code, but cannot compiled it.
--------------------------------------------------
template Connect(alias Adapter1, alias Adapter2)
{
template AdapterImpl(alias Adapter, alias PrevProc)
{
mixin Adapter; // line 5
int defaultProc(uint msg)
{
return PrevProc(msg);
}
}
int callDefProc(uint msg)
{
...
}
mixin AdapterImpl!(Adapter2, callDefProc) adptr2;
mixin AdapterImpl!(Adapter1, adptr2.proc) adptr1;
}
template TestAdapter1()
{
int proc(uint msg)
{
...
return defaultProc(msg);
}
}
template TestAdapter2(int param)
{
int proc(uint msg)
{
...
return defaultProc(msg);
}
}
class TestClass
{
mixin Connect!(
TestAdapter1, // ok
TestAdapter2!(1024) // failed ... mixinTest.d(5): mixin Adapter is
not a template
);
}
--------------------------------------------------
Do specialized template identifers enable templates to use parameter?
And is it make to use what mixin in template scopes is given alias
TemplateIdentifer what to be specialized ?
- knjhara
Feb 15 2006
It doesn't work because well... Adapter2 alias in the Connect template
is not a template, but a template instance. The following seems to work:
template TestAdapter2(int param)
{
template TestAdapter2()
{
int proc(uint msg)
{
// ...
return defaultProc(msg);
}
}
}
That way, TestAdapter2!(1024) really gives you a template, the inner
parameter-less TestAdapter2().
--
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/M d-pu s+: a-->----- C+++$>++++ UL P+ L+ E--- W++ N++ o? K? w++ !O
!M V? PS- PE- Y PGP t 5 X? R tv-- b DI- D+ G e>+++ h>++ !r !y
------END GEEK CODE BLOCK------
Tomasz Stachowiak /+ a.k.a. h3r3tic +/
Feb 15 2006
Tom S wrote:
It doesn't work because well... Adapter2 alias in the Connect template
is not a template, but a template instance. The following seems to work:
template TestAdapter2(int param)
{
template TestAdapter2()
{
int proc(uint msg)
{
// ...
return defaultProc(msg);
}
}
}
That way, TestAdapter2!(1024) really gives you a template, the inner
parameter-less TestAdapter2().
Thank you for answering my poor English, it worked.
But, it means that passing specialized temlates to temlate is impossible.
I want to suggest for Specialized Template Identifer as follows:
mixin Connect!(
TestAdapter1,
TestAdapter2(100) // this is a specialized identifer, not instance
);
What do you think?
-knjhara
Feb 15 2006








knjhara <knjhara cc.kyoto-su.ac.jp>