Функция членства класса может обработать по шаблону быть виртуальной?

Я услышал, что шаблоны функции членства класса C++ не могут быть виртуальными. Действительно ли это верно?

Если они могут быть виртуальными, что такое пример сценария, в котором использовал бы такую функцию?

293
задан curiousguy 4 September 2019 в 15:42
поделиться

1 ответ

В то время как более старый вопрос, на который ответили многие, что я верю сжатому методу, не настолько отличающемуся от других отправленных, состоит в том, чтобы использовать незначительный макрос, чтобы помочь упростить дублирование объявлений класса.

// abstract.h

// Simply define the types that each concrete class will use
#define IMPL_RENDER() \
    void render(int a, char *b) override { render_internal<char>(a, b); }   \
    void render(int a, short *b) override { render_internal<short>(a, b); } \
    // ...

class Renderable
{
public:
    // Then, once for each on the abstract
    virtual void render(int a, char *a) = 0;
    virtual void render(int a, short *b) = 0;
    // ...
};

Поэтому теперь, для реализации нашего подкласса:

class Box : public Renderable
{
public:
    IMPL_RENDER() // Builds the functions we want

private:
    template<typename T>
    void render_internal(int a, T *b); // One spot for our logic
};

преимущество здесь - то, что при добавлении недавно поддерживаемого типа это может все быть сделано от абстрактного заголовка и предшествовать возможно исправлению его в нескольких источник/заголовочные файлы.

1
ответ дан 23 November 2019 в 01:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: