optimization question: mpl
Larry Evans
cppljevans@suddenlink.net
Wed Jul 28 17:26:00 GMT 2010
On 07/28/10 10:53, Hite, Christopher wrote:
[snip]
> struct DecodeContext;
>
> struct M1{
> static const int id=1;
> static void decode(DecodeContext& ){}
> };
>
> struct M2{
> static const int id=2;
> static void decode(DecodeContext& ){}
> };
>
> struct M3{
> static const int id=3;
> static void decode(DecodeContext& ){}
> };
>
>
> template <int> struct ListMember;
>
> template <> struct ListMember<1>{ typedef M1 type; };
> template <> struct ListMember<2>{ typedef M2 type; };
> template <> struct ListMember<3>{ typedef M3 type; };
>
> template<int i>
> void foo(int id, DecodeContext& dc) {
> typedef typename ListMember<i>::type M;
> if(M::id==id)
> M::decode(dc);
> else
> foo<i-1>(id,dc);
> }
>
> template<>
> void foo<0>(int id, DecodeContext& dc) {}
>
>
>
> int main(){
> DecodeContext& dc= *(DecodeContext*)0;// junk for now
> int id=2; //sometime runtime dependent
> foo<3>(id,dc);
> return 0;
> }
>
[snip]
Wouldn't the following simplification work just as well?
template <int Id> struct ListMember{
static void decode(DecodeContext& ){}
};
template<int i>
void foo(int id, DecodeContext& dc) {
if(i=id)
ListMember<i>::decode(dc);
else
foo<i-1>(id,dc);
}
More information about the Gcc
mailing list