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

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

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

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6442 / 3081 / 306
Регистрация: 04.12.2011
Сообщений: 8,482
Записей в блоге: 4
12.10.2014, 03:46     Выбор шаблонного варианта для аргумента-массива
Цитата Сообщение от DrOffset Посмотреть сообщение
В общем я не знаю как еще объяснять
Я понимаю, что ты говоришь, - массив это тип и передать его можно по ссылке T& где T - абстрактный тип. Мой компилятор против. А у меня логика, которая тоже против. Ссылка на массив имеет отдельный синтаксис и typedef ничего не объясняет. Он то подставит именно правильное объявление и по форме (синтаксически) и по содержанию, - с размером массива то есть. Это же компилтайм трюк. Вот когда ты сказал:
Цитата Сообщение от DrOffset Посмотреть сообщение
тип массива в С++ представляет собой комбинацию типа и размерности
Цитата Сообщение от DrOffset Посмотреть сообщение
Но массив сложный тип и квалификации T недостаточно для выбора в нашем случае.
Мне и захотелось сказать: "И..." То есть правильно же. У массива есть синтаксис определения ссылки и там вся необходимая информация, как и должно быть. Поэтому к ссылке на тип и не приводится. Но возник спор. Не стану упорствовать.

Добавлено через 59 минут
Цитата Сообщение от IGPIGP Посмотреть сообщение
Не стану упорствовать.
Эт я погорячился. Как и со всем остальным. Признаю что неправ. Только-что сделал вот что: оставил определение шаблона:
C++
1
2
3
4
template <typename T>
void foo(T& t){
cout << "&" << sizeof(t)/sizeof(t[0])<<endl;
}
в одиночестве. И компилятор стал передавать имя массива по ссылке на него! И это значит, что ты прав и когда они в паре с шаблоном для T* то последний побеждает потому, что его проще вывести...
Тогда непонятно, почему нет неоднозначности? Такое ощущение, что компилятор не видит шаблон с T& когда есть вариант с T*. А ведь оба вызываются одинаково.
Удивление усиливает то, что если оставить такие два:
C++
1
2
3
4
5
6
7
8
template <typename T, size_t N>
void foo(T (&t)[N]) {
cout << "T (&t)[N] with N= " << sizeof(t)/sizeof(T)<<endl;
}
template <typename T>
void foo(T* t){
cout << "*" << sizeof(t)<<endl;
}
то компилируется только если закоментировать вызов foo(a); , а иначе неоднозначный вызов! Почему же Т* и T& уживаются, а T* и T (&t)[N] нет? Я потому и решил сначала, что T& не в тему и тогда есть логика, как мне казалось. Оказывается если "дожать" и оставить T& в одиночестве, - Ok! Пусть T* "легчевыводимее" T&, почему они не дерутся, в то время когда одновременно определённые T* и T (&t)[N] не переносят вызов по имени массива? Не уж-то ссылка T (&t)[N] борется с T* за имя массива уже преобразованное к указателю? Кем и зачем? Не понимаю.
Так или иначе, а я оказался неправ. Приношу извинения.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru