Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> шаблоны 
:(
    Опции темы
zss
Дата 6.5.2006, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



есть шаблонный конструктор
Код

struct S{
    int s1;
    int s2;
   
    template <class T> S(const T& obj){
        ...
    }
}


почему компилятор не требует задания шаблонного аргумента
Код

struct D;

D d;
S* s = new S(d);


а вроде должно так
Код

struct D;

D d;
S<D>* s = new S(d);


Тоесть не понятно - иногда для шаблонов это обязательно, а иногда нет smile
 
PM MAIL ICQ   Вверх
maxim1000
Дата 6.5.2006, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 17
Всего: 110



если я не ошибаюсь, компилятор пытается "угадать" параметры шаблона на основании имеющейся информации
в данном примере он смотрит на то, что параметр константной ссылки должен соответствовать параметру шаблона, вот и делает T=D
такое угадывание не всегда корректно, но никто не заставляет ним пользоваться - в более сложных случаях можно указывать параметры шаблона везде - так будет надёжнее... 


--------------------
qqq
PM WWW   Вверх
DeadSoul
Дата 6.5.2006, 22:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1217
Регистрация: 25.9.2005
Где: Москва

Репутация: 2
Всего: 11



Цитата(maxim1000 @  6.5.2006,  22:28 Найти цитируемый пост)
если я не ошибаюсь, компилятор пытается "угадать" параметры шаблона на основании имеющейся информации


maxim1000, Вы нисколько не ошибаетесь 


--------------------
 Если Вы получили ответ на Ваш вопрос, то нажмите на "Вопрос решен". 

Бьем спамеров их же оружием. Пусть весь спам сыпется им
[email protected] 
PM   Вверх
zss
Дата 6.5.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



Цитата(maxim1000 @  6.5.2006,  22:28 Найти цитируемый пост)
в более сложных случаях можно указывать параметры шаблона везде - так будет надёжнее...  

меня смутило, что явное задание шаблонного аргумента 
не очень нравится компилятору.

Выскакивают его непонятные притензии smile 
PM MAIL ICQ   Вверх
Void
Дата 6.5.2006, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 40
Всего: 173



Цитата(zss @  7.5.2006,  01:09 Найти цитируемый пост)
меня смутило, что явное задание шаблонного аргумента 

Меня тоже слегка озадачило. Выяснилось, что:
Цитата
because the explicit template argument list follows the function template name, and because conversion member function templates and constructor member function templates are called without using a function name, there is no way to provide an explicit template argument list for these function templates.

Стандарт, 14.5.2/5. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
MAKCim
Дата 7.5.2006, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

S<D>* s = new S(d);

S у вас не шаблон, потому и выскакивают непонятные претензии  smile

Добавлено @ 08:47 
Цитата

Тоесть не понятно - иногда для шаблонов это обязательно, а иногда нет 

Как раз понятно: когда компилятор не может вывести тип - требуется явная параметризация (подробнее Вандевурд, Джосаттис)
Код

template<class T> struct traits
    {typedef const T& type;};

template<class T> void F(const T& obj) {}
template<class T> void G(typename traits<T>::type obj) {}

int main()
{
    F(12); // OK
    G(12); // Error
    G<int>(12); // OK
}
 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
zss
Дата 7.5.2006, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 708
Регистрация: 17.6.2004

Репутация: 1
Всего: 2



Цитата(MAKCim @  7.5.2006,  08:42 Найти цитируемый пост)
S у вас не шаблон

наверное ты прав smile Но для конструктора тоже не задается шаблонный аргумент 
PM MAIL ICQ   Вверх
MAKCim
Дата 7.5.2006, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

тоже не задается шаблонный аргумент  

он выводится 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0488 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.