Как реализовать на заводе несколько коммутаторов?

Я хочу реализовать фабричную функцию для создания объектов. Мой шаблон объекта выглядит так:

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

и моя фабрика такая:

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 ....
}

Заводская функция должна принимать нестатические данные char (ta, tb) поскольку это не может быть определено во время компиляции, и я думаю, что в этом весь смысл этой фабрики. По факту,ta а такжеtb читаются из файла (или сети).

Я хочу более простое решение, чтобы избежать раздражающего 2-уровневого переключателя.

Я думаю, что мой вопрос похож накак-бы-один-записи-а-мета-если-то еще, если в-с за исключением того, что я не могу использовать статические параметры.

Возможно, я должен просто вернуться к макросам C и использовать некоторые трюки макросов, чтобы уменьшить мой текущий код?

Заранее спасибо!

UPDATE

Ответ @Rob:

Мой реальный код был бы более сложным со многими другими вещами в нем, и его было бы труднее читать и не связывать во многих аспектах. Я пытаюсь получить правильный псевдокод. Если есть какие-либо проблемы, пожалуйста, сообщите мне :-).

Ответ @Dynguss:

Моя проблема в том, что в моей реальной реализации параметры фабрики (ta, tb) будут большими по диапазону, например, 10 X ta и 20 X tb, а сочетание ta и tb будет очень длинным в строках, и его будет сложно поддерживать , Поэтому мне нужен хоть какой-то способ облегчить комбинированные усилия.

Ответы на вопрос(3)

Ваш ответ на вопрос