Template Question
Bill Baxter
dnewsgroup at billbaxter.com
Mon Apr 14 19:01:18 PDT 2008
Mike Parker wrote:
> Bill Baxter wrote:
>> Mike Parker wrote:
>>> I've not worked much with templates in any language beyond the
>>> basics. Right now, I've got a problem that I've solved, but for which
>>> I'm looking a different solution.
>>>
>>> What I have is a templated interface like so:
>>>
>>> interface Foo(T)
>>> {
>>> void init(T);
>>> void term();
>>> void blah();
>>> void bleh();
>>> }
>>>
>>> Then I have a Templated manager class intended to work with
>>> differently parameterized Foos:
>>>
>>> class Manager(U)
>>> {
>>> ...
>>> }
>>>
>>> The issue is that I want to make sure that Manager is instantiated
>>> with Foos without it knowing what the T in Foo is. This obviously
>>> doesn't work:
>>>
>>> class Manager(U : Foo)
>>> {
>>> }
>>
>> I think there is a variation of that which is supposed to work:
>>
>> class Manager(U : Foo!(T), T)
>> {
>> }
>>
>> I'm not sure if it does in practice or not, though.
>>
>>
>
> Unfortunately, it doesn't.
I keep forgetting you don't get any type deduction with class templates.
So maybe would work if you are explicit about both arguments. But that
kind of defeats the purpose.
Yeh, so I guess you just have to settle for
class Manager(U /* : Foo!(T) */)
{
static if (is(U T_ : Foo!(T_))) {
alias T_ T;
}
else {
static assert(false, "U must be a Foo!(T) for some T");
}
}
--bb
More information about the Digitalmars-d-learn
mailing list