I have created N classes that take from one to N ints into constructors (and I hoped that would be enough) but appeared I am wrong.
Here are 2 sample classes:
template < class T0 , class T1>
class my_map {
    typedef T0 type_0;
    typedef T1 type_1;
    std::map<std::string, type_0* > T0_var;
    std::map<std::string, type_1* > T1_var;
    friend class apitemp;
public:
    my_map(  int meaningless0 = 42  , int meaningless1 = 42  ) {}
    class apitemp {
        std::string n_;
        my_map* p;
    public: apitemp(std::string name_, my_map* parent) : n_(name_), p(parent) {}
            operator type_0*() {return p->T0_var[n_] ; }
            operator type_1*() {return p->T1_var[n_] ; } 
    };
    void insert(std::string name, type_0* ptr)
    { T0_var[name] = ptr; } 
    void insert(std::string name, type_1* ptr)
    { T1_var[name] = ptr; } 
    apitemp operator[](std::string n_) {return apitemp(n_, this);} 
}; 
template < class T0> 
class my_map
{ 
    typedef T0 type_0; 
    std::map<std::string, type_0* > T0_var;
    friend class apitemp;
public: 
    my_map(  int meaningless0 = 42  ) {} 
    class apitemp 
    {
        std::string n_;
        my_map* p;
    public:
        apitemp(std::string name_, my_map* parent) : n_(name_), p(parent) {}
        operator type_0*() {return p->T0_var[n_] ; }
    }; 
    void insert(std::string name, type_0* ptr) 
    { T0_var[name] = ptr; } 
    apitemp operator[](std::string n_) {return apitemp(n_, this);} 
};
Order does not matter... when both classes are present I can't compile my code, when one is commented (and we use API from only one of 2 classes) everything compiles... but when I try to use both I get compiler errors... So I wonder how to make such classes overridable?
 
     
    