Как реализовать на заводе несколько коммутаторов?
Я хочу реализовать фабричную функцию для создания объектов. Мой шаблон объекта выглядит так:
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 будет очень длинным в строках, и его будет сложно поддерживать , Поэтому мне нужен хоть какой-то способ облегчить комбинированные усилия.