Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Выбор шаблонного варианта для аргумента-массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Поток не сигнализирует событием о своем окончании http://www.cyberforum.ru/cpp/thread1272738.html
Всем привет, нужна помощь задача такая. Есть метод у меня (mnThread) который постоянно поставляет данные, процедура (get_data) эти данные получает. Как только данные получены я устанавливаю событие и...
C++ Не могу понять как исправить ошибку #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1... http://www.cyberforum.ru/cpp/thread1272081.html
Помогите построить факториал в MFC C++
Помогите построить факториал в MFC. Целый день капаюсь в уроках, но так ничего не вышло Добавлено через 2 часа 59 минут делаю по примеру...
C++ Как "засунуть" классы в .dll ?
Добрый вечер! У меня имеется классовая иерархия, базовый класс сотрудник, наследники программист, экономист, электронщик и т.п. Сделал базу данных с помощью (vector.h) , и в main заполняю БД, и потом...
C++ Информация по Button, Panel, Label, TextBox в VS2010 http://www.cyberforum.ru/cpp/thread1270298.html
Среда visual c++ 2010 для работы с графическим интерфейсом. Компоненты среды программирования(свойства,события,методы,пример использования) Button, Panel, Label, TextBox. Заранее спасибо за ответ.
C++ Уничтожение файлов и папок, без возможности восстановления Здравствуйте! Собственно это моё задание "Написать windows-приложение для гарантированного удаления файлов(каталогов) без возможности восстановления специализированным ПО". Нашла на википедии... подробнее

Показать сообщение отдельно
DrOffset
7155 / 4296 / 972
Регистрация: 30.01.2014
Сообщений: 7,101
11.10.2014, 23:15
IGPIGP, у тебя в самом начале рассуждений ошибка, которая и завела тебя в тупик.
Вот здесь:
Цитата Сообщение от IGPIGP Посмотреть сообщение
то есть снова к T*, ссылка на массив и ссылка на тип разные звери и преобразование к ссылке int& не будeт и тут
никто не утверждал, что будет преобразование к ссылке на тип. Я писал:
Цитата Сообщение от DrOffset Посмотреть сообщение
T разрешится в ссылку на массив
Т.е. при использовании варианта
C++
1
2
template <typename T>
void foo(T & t)
с аргументом a, где а объявлен как int a[100], то T будет int[100], итого получим ссылку на массив, при подстановке T = int[100] аргумент будет выглядеть как int (&)[100].

Цитата Сообщение от Tulosba Посмотреть сообщение
Не очень понял, почему преобразование к ссылке (не важно, константной или нет) приоритетнее преобразования к константному указателю.
Скопирую ответ из ЛС:
Цитата Сообщение от DrOffset Посмотреть сообщение
Преобразование к ссылке рассматривается как отсутсвие (identity) преобразования (13.3.3.1.4) в нашем случае.
Преобразование к указателю одного ранга с отсутствием преобразования (демонстрация неоднозначности в моем посте)
А вот константность добавляет Qualification conversion, которая не смотря опять же на одинаковый ранг, разрешается исходя из фактической cv-квалификации аргумента (см. 13.3.3.2/3). Если есть перегрузка, где не требуется преобразование неконст->конст то будет выбрана именно она.
Цитата Сообщение от Tulosba Посмотреть сообщение
И убрав при этом версию с указателем вовсе?
Да, придется убрать. Впрочем, можно не обращать внимания на ту часть моего ответа, где я предлагал способ лечения этого, т.к. я слегка торопился и скомкал эту часть, да и к теме это напрямую не относится - все и так знают как это лечить.

Добавлено через 6 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Почему имя массива может подойти там где объявлена ссылка на тип и ожидается то что приводится к T?
Она подойдет если нет других более подходящих вариантов. Об этом и была речь. В варианте Tulosba более подходящей является перегрузка с указателем. Добавив const к ней мы сделали более подходящим вариант со ссылкой. Про детали я уже выше написал.

Добавлено через 12 минут
Вообще вся эта кухня на самом деле довольно сложна.
Но можно использовать небольшие эмпирические правила:
1) Всегда применяется наиболее специализированный шаблон.
2) Перегрузка разрешается всегда в пользу наименьшего количества преобразований (или их отсутствия).
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru