Kiedyś byłem pewien, że nie możesz tego zrobić, ale pewnego dnia bawiłem się z jakimś kodem i wydawało się, że kompiluje i działa. Chcę tylko sprawdzić, czy nie mam szczęścia. Czy klasa szablonu może mieć czystą funkcję wirtualną - co, jak sądzę, oznaczałoby również, że dla destruktora byłyby również prawidłowe metody wirtualne?Czy dozwolone są czyste metody wirtualne w klasie szablonu?
template <typename WordType> class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
Próbowałem szuka go w Internecie i wszystko, co udało mi się znaleźć to, że nie można mieć metodę wirtualną (czystej lub w inny sposób) w normalnej klasie, takie jak ten:
class DataSource
{
public:
DataSource();
DataSource(DataSource const& other);
virtual ~DataSource();
template <typename WordType>
virtual void Put(
WordType const* const data,
unsigned int const wordCount) = 0;
}
A to ze względu na niemożność zarządzania wirtualnym stołem w celu odniesienia się do wszystkich typów możliwych typów, z którymi ta metoda zostanie wdrożona.
Jednakże, jeśli chodzi o funkcję wirtualnego członka klasy szablonu, wygląda na to, że jest inna, ponieważ cała klasa jest "tworzona" za pośrednictwem parametru szablonu, gdy zmienna klasy szablonu jest podana. W tym momencie wirtualna metoda jest podobna do każdej innej wirtualnej metody klasy ze względu na "znajdowanie i zastępowanie" szablonów.
W każdym razie, powtarzając to pytanie na wypadek, gdyby się zgubił: Czy wirtualne (czyste i/lub normalne) funkcje wirtualne są dozwolone w klasie tempate?
Brzmi jak już zorientowali się odpowiedź na to ... –
Jak powiedziałem, przysięgam sobie, że próbował go wcześniej i miał problemy. Kiedy nagle zadziałało, chciałem się upewnić, że to nie tylko dlatego, że byłem na innym kompilatorze, różnych flagach ostrzeżenia/błędów itp. I że zostało to zdefiniowane - najlepiej - że było w porządku przez standard. – Anthony
Ponadto, na ile jest to warte, nie mogłem znaleźć niczego online, które ostatecznie powiedziałoby tak czy inaczej. Jakie jest lepsze miejsce na umieszczenie tych informacji niż SO? – Anthony