class AbortType{
public:
    AbortType(){abort();}
};
class Factory{
public:
    Base * Create(int ID){
        switch(ID){
        case 0:return new TypeAtNonStrict<ClassList,0,AbortType>::Result;
        case 1:return new TypeAtNonStrict<ClassList,1,AbortType>::Result;
        case 2:return new TypeAtNonStrict<ClassList,2,AbortType>::Result;
        //...
        }
        //static Base * (*Funcptr[ClassList])()={TypeAtNonStrict<ClassList,0,AbortType>::Result::operator new(),
        //TypeAtNonStrict<ClassList,1,AbortType>::Result::operator new()};
        abort();
    };
};
Factoryはperlとか使って出力しておく。
templateスレへ行けとか言われそうな気もするけど思いついたので。
typelistとかTypeAtとかも書くと長くなりそうなので省略