Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Список объектов шаблонного класса


Автор: OlegIT 13.3.2014, 21:07
Есть шаблон
Код

template <class T>
class Temp1 : public T
{
public:
    Temp1 ()
    {
    }
........................
public:
    void func1(void);
}

Создаю объекты этого типа с разными классами-аргументами. Отдельно всё работает, а как начинаю создавать список указателей (Qlist<...>) на эти объекты начинаются ошибки. Тут два варианта, первый, базовые классы T имеют один порождающий класс и список создаю из указателей на этот класс. Второй вариант список из указателей на Temp1, но этот вариант вообще не даёт список сформировать. А причина одна при обращении по указателю, вызов функции из списка или включение указателя в список, вынь да полож аргумент класса. Для каждого объекта он разный и как тут быть, какой аргумент использовать не знаю. 

Автор: Lukkoye 13.3.2014, 22:09
Нужен не зависящий от параметра общий для всех предок :

Код

template <class T> class Temp1 : public T, pubic Common
{
public:
    Temp1 ()
    {
    }
........................
public:
    void func1(void);
}


Хотя лучше, если все T являются наследниками от общего предка.

Автор: OlegIT 13.3.2014, 22:27
Цитата(Lukkoye @  13.3.2014,  22:09 Найти цитируемый пост)
Хотя лучше, если все T являются наследниками от общего предка. 

Так оно и есть, все T порождаются от QWidget, но что дальше?, в QWidget моей функции нет, а для использования Temp1 нужен аргумент.

Автор: xvr 14.3.2014, 11:54
Цитата(OlegIT @  13.3.2014,  22:27 Найти цитируемый пост)
Так оно и есть, все T порождаются от QWidget, но что дальше?, в QWidget моей функции нет,

Сделайте интерфейс с вашей функцией и унаследуйте все от него
Код

struct MyInterface {
 virtual void* func1() =0;
};

template <class T> class Temp1 : public T, public MyInterface
{
public:
    Temp1 ()
    {
    }
........................
public:
    void func1(void);
};

QList<MyInterface*> list;


PS. Собственно вам это Lukkoye и советовал  smile 

Автор: OlegIT 18.3.2014, 08:09
Спасибо.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)