Jak zaprojektować wokół ograniczenia, że funkcje członków szablonów nie mogą być wirtualne
Mam problem z projektowaniem, w którym (w C ++) chciałbym, aby funkcja członka w szablonie (klasy innej niż szablon) była wirtualna i zastanawiam się, czy istnieje dobry, elegancki sposób na rozwiązanie tego problemu.
Scenariusz idzie, mammaszyny żeproces rodzajowyprzedmiotów. Używam abstrakcyjnej klasy bazowej dlamaszyny z wirtualnymproces (przedmiot) funkcja, dzięki której każda maszyna może zdefiniować własną unikalną metodę przetwarzania. Problem polega na tym, że elementy są również „ogólne”, ponieważ ujawniają pewne interfejsy, w jaki sposób mogą być przetwarzane. Z powodów (głównie dla wydajności ... brak vtable overhead), chciałbym użyć polimorfizmu w czasie kompilacji dla tych elementów. Więc teraz każda maszyna będzie miała interfejs taki jak:
class Machine
{ public:
template <typename T>
virtual void process(T& item) = 0;
};
Jednak w C ++ jest to niemożliwe, ponieważ funkcje członków szablonów nie mogą być wirtualne. Z pewnością mogę sprawić, że klasa maszyn będzie się wzorować na typie elementu T, ale dodaje to więcej bólów głowy w większym schemacie projektowania i tak naprawdę żadna inna część klasy Maszyna nie zależy od elementu ... to tylko argument funkcji process () .
Czy istnieje lepszy sposób na obejście tego lub jakichkolwiek sugestii, jak zapewnić tego rodzaju ogólną rodzinę maszyn przetwarzających rodzinę ogólnych elementów (gdzie elementy używają polimorfizmu w czasie kompilacji). Jestem poza głębokim zakresem mojego projektu.
Doceń wszelkie sugestie