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.