Jak wdrożyć fabrykę z wieloma przełącznikami?

Chcę zaimplementować funkcję fabryczną do tworzenia obiektów. Mój szablon wygląda tak:

template <typename TA, typename TB>
struct MyImpl : public MyInterface
{
    // content
};

a moja fabryka jest taka:

MyInterface* factory(char ta, char tb)
{
    if(ta == 'c' && tb == 'c')
    {
        return new MyImpl<char, char>();
    }
    if(ta == 'c' && tb == 's')
    {
        return new MyImpl<char, short>();
    }
    if(ta == 's' && tb == 'c')
    {
        return new MyImpl<short, char>();
    }
    // and so on ....
}

Funkcja fabryki musi akceptować nie statyczne dane znaków (ta, tb) ponieważ nie można go było określić w czasie kompilacji i myślę, że to jest cały sens tej fabryki. W rzeczywistości,ta itb są odczytywane z pliku (lub sieci).

Chcę prostszego rozwiązania, aby uniknąć irytującego dwupoziomowego przełącznika.

Myślę, że moje pytanie jest podobne dohow-would-one-write-a-meta-if-else-if-in-c z wyjątkiem tego, że nie mogę używać parametrów statycznych.

Być może powinienem po prostu wrócić do makr C i użyć kilku sztuczek makr, aby zmniejszyć obecny kod?

Z góry dziękuję!

AKTUALIZACJA

Odpowiedź na @Rob:

Mój rzeczywisty kod byłby bardziej złożony z wieloma innymi rzeczami w nim i trudniejszymi do odczytania i nie powiązanymi w wielu aspektach. Próbuję uzyskać pseudo kod, jeśli jest jakiś problem, uprzejmie poinformuj mnie :-).

Odpowiedz na @Dynguss:

Moim problemem jest to, że w mojej rzeczywistej implementacji parametry fabryki (ta, tb) byłyby duże w zakresie, jak 10 X ta i 20 X tb, a kombinacja ta i tb byłaby bardzo długa w liniach i trudna do utrzymania . Potrzebuję więc przynajmniej jakiegoś sposobu na złagodzenie wysiłków związanych z połączeniem.

questionAnswers(3)

yourAnswerToTheQuestion