Я услышал, что шаблоны функции членства класса C++ не могут быть виртуальными. Действительно ли это верно?
Если они могут быть виртуальными, что такое пример сценария, в котором использовал бы такую функцию?
В то время как более старый вопрос, на который ответили многие, что я верю сжатому методу, не настолько отличающемуся от других отправленных, состоит в том, чтобы использовать незначительный макрос, чтобы помочь упростить дублирование объявлений класса.
// 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
};
преимущество здесь - то, что при добавлении недавно поддерживаемого типа это может все быть сделано от абстрактного заголовка и предшествовать возможно исправлению его в нескольких источник/заголовочные файлы.