Вы можете сделать это с помощью using
конструктора базового класса (и других методов тоже):
#include <iostream>
#include <vector>
#include <string>
struct Card {
std::string name;
};
class CardVector : public std::vector<Card> {
using std::vector<Card>::vector; // <- like so
void removeCards(const CardVector& cardVector) {}
void appendCards(const CardVector& cardVector) {}
};
int main() {
Card a{"A"}, b{"B"};
CardVector cv = {a, b};
for(auto& c : cv) {
std::cout << c.name << "\n";
}
}
... но поскольку деструктор std::vector
не является виртуальным, убедитесь, что вы никогда не удалите объекты, даже если указатель базового класса.
Чтобы избежать головной боли в будущем, используйте композицию и создайте прокси-функции для тех, кого вам нужно поддерживать.
Гонки легкости на орбите проливают свет на ошибки компиляции:
Причиной был отсутствующий ctor, принимающий std::initializer_list
, и чтобы исправить это, вы можете либо добавить один конструктор (принимая std::initializer_list<Card>
в качестве аргумента), либо повторно использовать ctor базового класса, как я делал выше. LRiO также поделился VS и по сей день делает дополнительную копию аргументов ctor, когда вы наследуете ctors вроде этого , что, безусловно, стоит учитывать, если вы используете VS.