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

questionAnswers(1)

yourAnswerToTheQuestion