Название: template Отправлено: jaroslav от Сентябрь 27, 2013, 16:45 Привет. Ребята, подскажите по шаблонам.
Код: template <class T, class M, template <class> class S> Использование функции: Код: [i]functionName[/i]<QTreeView, QStandardItemModel, QVector<int>& > Ошибка: no matching function for call to 'ClassName::functionName(QTreeView*&, QStandardItemModel*&, QVector<int>&)' candidate is: template<class T, class M, template<class> class S> static void functionName(T*, M*, S<int>&) Подскажите, я не правильно что-то делаю или компилятор не может схавать? Название: Re: template Отправлено: mutineer от Сентябрь 27, 2013, 20:38 мне кажется у тебя проблемы с третьим параметром, с амперсандами ты перемудрил. Да и при вызове функции вроде как не надо типы параметров в угловых скобках указывать - компилятор сам извлечет типы из параметров
Название: Re: template Отправлено: jaroslav от Сентябрь 28, 2013, 13:14 Ну не знаю, пробовал убрать &, и в угловые скобки перед функцией тоже убирал, все равно та же ошибка.
Название: Re: template Отправлено: mutineer от Сентябрь 28, 2013, 13:15 Какого типа storage?
Название: Re: template Отправлено: jaroslav от Сентябрь 28, 2013, 13:16 QVector<int>
Название: Re: template Отправлено: mutineer от Сентябрь 28, 2013, 13:19 Судя по декларации твоей функции она хочет QVector<int>&
а записью &storage ты отдаешь ей QVector<int>* по идее амперсанд перед storage не нужен Название: Re: template Отправлено: mutineer от Сентябрь 28, 2013, 13:26 Код
Вот такой код точно работает, значит тебе надо так же сделать третий параметр. Я надеюсь что tree и model у тебя указатели Название: Re: template Отправлено: jaroslav от Сентябрь 28, 2013, 13:46 Да вроде же так и делаю. Блин, эрроры кидает. Чем компилишь?
Название: Re: template Отправлено: mutineer от Сентябрь 28, 2013, 13:50 http://codepad.org другого сейчас под рукой нет.
Покажи как делаешь включая объявления переменных, которые передаешь как параметры Название: Re: template Отправлено: jaroslav от Сентябрь 28, 2013, 13:56 declare:
Код: template <class T, class Q, template <class> class W> implement: Код: template <class T, class Q, template <class> class W> call: Код: QVector<int> storage; tree и model указатели. Название: Re: template Отправлено: mutineer от Сентябрь 28, 2013, 13:59 Так а вот это я сразу не увидел.
Ну и так, в порядке размышления - я не могу придумать код, который был бы к месту внутри такой шаблонной функции. Тут точно нужен шаблон? Название: Re: template Отправлено: jaroslav от Сентябрь 28, 2013, 14:11 В принципе можно и обойтись без шаблона, но делается на перспективу. По поводу не шаблонных классов с шаблонными функциями не могу тоже сказать на 100%.
Окей, оставлю пока затею с шаблоном, а далее видно будет. mutineer тебе большое спасибо за уделенное время. Название: Re: template Отправлено: mutineer от Сентябрь 28, 2013, 14:14 В принципе можно и обойтись без шаблона, но делается на перспективу. По поводу не шаблонных классов с шаблонными функциями не могу тоже сказать на 100%. Я уже проверил и прочитал - можно. А по поводу перспективы - какие операции можно провести с model и view, но при этом так, чтобы эти же операции можно было сделать с не наследниками от них? Название: Re: template Отправлено: m_ax от Сентябрь 28, 2013, 14:34 Реализация этой функции должна быть там же (в .h) где и её объявление. Скорее всего проблема в этом..
Название: Re: template Отправлено: jaroslav от Сентябрь 28, 2013, 17:11 Цитировать Я уже проверил и прочитал - можно. Да, я тоже уточнил. Можно.Цитировать Реализация этой функции должна быть там же (в .h) где и её объявление. Скорее всего проблема в этом. m_ax спасибо. В этом была трабла. Вопрос решен, большое спасибо m_ax и mutineer. Название: Re: template Отправлено: Igors от Сентябрь 28, 2013, 17:29 Реализация этой функции должна быть там же (в .h) где и её объявление. Скорее всего проблема в этом.. m_ax, если нетрудно - сбацайте примерчик с такой конструкцией (аргумент с конструкцией template). Я читал что она возможна, но на этом мои познания здесь кончаются :) СпасибоНазвание: Re: template Отправлено: m_ax от Сентябрь 28, 2013, 18:35 Типичный пример (из книжки, как демонстрация):
Код
Название: Re: template Отправлено: Igors от Сентябрь 29, 2013, 05:49 Не понял, а где же "инстанциируется" тип U ?
Название: Re: template Отправлено: Old от Сентябрь 29, 2013, 08:33 Не понял, а где же "инстанциируется" тип U ? Здесь:Код
|