Есть ли преимущества наследования от абстрактного шаблона?

Я имею в виду делать следующее:

template<class Type> class Foo {
public:
... // Code Here.
};

class Bar : public Foo<Type> {
public:
...
};

Где Type при объявлении класса Bar на самом деле является типом (int, bool и т. Д.) Или типом, созданным ранее.

Если этот вопрос слишком расплывчатый или на него уже дан ответ, пожалуйста, дайте мне знать.

1 ответ

Полезна ли языковая функция или нет, зависит от того, как и где вы ее используете. Для наследования от шаблонного абстрактного шаблона, вот один гипотетический сценарий, который я могу придумать, где он может быть полезен.

template <typename Type> class Gadget {
public:
    string name() = 0;
};

class SmartPhone : public Gadget<Phone> {
public:
    string name() { return "I am a smart phone"; }
};

class SportsCar : public Gadget<Car> {
public:
    string name() { return "I am a sports car"; }
};

vector<Gadget*> inventory;
inventory.push_back(new SmartPhone());
inventory.push_back(new SportsCar());
// etc ...

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

Другие вопросы по тегам