Свой список C++

232
14 января 2018, 05:27

Есть список MyList. Мне нужно чтобы в методе addItem вызывался копирующий конструктор класса у объекта переданного в метод addItem, а не только класса родителя T. Как это можно сделать?

template <class T>
MyList {
...
  //метод получает объект класса T и производные от него
  void addItem(T& item) {
    ...
    node.x = new T(item);
    ...
  }
}
Answer 1

Вообще-то вы натолкнули на решение.

Делаем ваш метод добавления шаблонным. Что-то вроде

template<typename T>
class myList
{
    T* data[3];
public:
    template<typename U>
    void add(int i, const U& u)
    {
        data[i] = new U(u);
    }
    void out()
    {
        for(const auto& p: data) p->out();
    }
};
struct Base
{
    virtual void out() { cout << "Base\n"; }
};
struct D1: public Base
{
     void out() { cout << "D1\n"; }
};
struct D2: public D1
{
    void out() { cout << "D2\n"; }
};
int main(int argc, const char * argv[])
{
    myList<Base> m;
    Base b;
    D1 d1;
    D2 d2;
    m.add(0,b);
    m.add(1,d1);
    m.add(2,d2);
    m.out();
}

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

READ ALSO
C++ Класс Binary перегрузка оператора &ldquo;+&rdquo;

C++ Класс Binary перегрузка оператора “+”

У меня задание реализовать класс Binary и перегрузить в классе оператор +Я это реализовал, но при выводе выдает неправильный результат

291
Многопоточность - в чём смысл std::thread.join()?

Многопоточность - в чём смысл std::thread.join()?

Сколько использую потоки, никогда их не join()-ил

316
C# инжектор не инжектит dll на c++

C# инжектор не инжектит dll на c++

Есть инжектор на c#, он написан с помощью импортированных из c++ функций и EAT hookВообще нет идей почему это не работает

275
GoogleMock: ошибка MTd_StaticDebug при сборке проекта

GoogleMock: ошибка MTd_StaticDebug при сборке проекта

Собрал библиотеки из фреймворка для тестирования GoogleMock gmocklib, подключил к проекту, но при сборке получаю ошибку:

320