|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
std::is_invokable не работает для фунций членов19.12.2019, 16:08. Показов 8032. Ответов 108
Метки нет (Все метки)
Это так и должно бытьили я чтото неправильно делаю ?
0
|
|
| 19.12.2019, 16:08 | |
|
Ответы с готовыми решениями:
108
Операция std::cout для Объекта типа std::string Не воспринимает ни std::cout, ни std::cin. Вобщем ничего из std. Также не понимает iostream |
|
63 / 46 / 11
Регистрация: 27.12.2017
Сообщений: 1,484
|
|
| 20.12.2019, 19:57 | |
|
DrOffset, а что такое функции-члены? В чем отличие между обычными функциями и функциями-членами?
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 20.12.2019, 19:58 | ||
this становится первым явным) и уже фактически вызов делать где-то внутри этого функционального объекта. То есть "общим знаменателем" будет именно функциональный объект с перегруженным оператором () и каким-то внутренним состоянием. (Еще раз, превратить, например, void (Class::*)(int) в void (*)(Class *, int) невозможно, то есть использовать обычные указатели на функции в качестве "общего знаменателя" не получится).Прямую реализацию такого шаблонного функционального объекта придется специализировать отдельно для обычных функций и для методов классов. Т.е. внешне на этапе компиляции вызовы таких функциональных объектов будут выглядеть единообразно (т.е. параметр this уже вытащен на белый свет и поставлен в один ряд с остальными параметрами). Но типы таких функциональных объектов будут разными и несовместимыми для разных специализаций, т.е. например для void (Class::*)(int) и для void (*)(Class *, int), несмотря на то, что вызовы будут выглядеть одинаково.Однако далее поверх этого можно применить технику type erasure (заплатив за это производительностью) и свести все эти несовместимые типы к одному типу для вызовов с одним и тем же набором параметров. И вы получите ни что иное как std::function, который полностью скрывает внутри себя разницу между void (Class::*)(int) и void (*)(Class *, int).
0
|
||
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|
| 20.12.2019, 20:12 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
| 20.12.2019, 22:30 | |
|
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|
| 20.12.2019, 22:39 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 20.12.2019, 22:46 | ||
|
0
|
||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 20.12.2019, 23:13 | ||
|
(Непонятно даже, зачем вы занимались всеми этими ненужными манипуляциями с указателями в своем примере, если ту же самую "картонную дурылку" можно было получить единственным вызовом memcpy.)
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 20.12.2019, 23:16 [ТС] | ||
|
За такое по рукам многие тимлиды надают.
0
|
||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
|||
| 20.12.2019, 23:23 | |||
memcpy? Ах, сорри, я забыл: std::memcpy.Разумеется, любой человек с мало мальским практическим опытом в С++ сразу заметит, что размер указателя на метод в корректной реализации обычно отличается от размера обычного указателя на функцию, по каковой причине никакой переинтерпретацией или преобразованием, как ни верти, первый во второй запихнуть не получится.
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||||
| 20.12.2019, 23:31 [ТС] | ||||
0
|
||||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||
| 20.12.2019, 23:48 | ||||
memcpy является в совершенно одинаковой мере С++ и С функцией. Никакого "это функция С" тут нет и быть не может.Free. Именно Free, а не Free *. Тип Free уже содержит внутри себя указатель. А приведение к Free * - это не более чем "пионэрский" способ (в общем случае - неработоспособный), которым аффтар выполнил переинтерпретацию памяти. Это деталь, которая к делу не относится вообще никак. Как я сказал выше, можно было обойтись просто memcpy.memcpy был бы свободен от именно этой проблемы, но все равно был бы бесполезной "пионэрской" тратой времени. Я уже закрыл этот вопрос раз и навсегда выше. Процитирую самого себя еще раз: "Разумеется, любой человек с мало мальским практическим опытом в С++ сразу заметит, что размер указателя на метод в корректной реализации обычно отличается от размера обычного указателя на функцию, по каковой причине никакой переинтерпретацией или преобразованием, как ни верти, первый во второй запихнуть не получится."
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 21.12.2019, 00:04 | ||||
|
суть в том, что преобразование возможно. в контексте преобразования типов указателей это - синонимы. memcpy не нужен. приведенный мною фрагмент - пример-иллюстрация того, чем на самом деле является указатель-на-функцию-член. иногда новички спрашивают: "чем указатель-на-функцию-член отличается от обычных функций?" я объясняю им: технически, функция-член-класса - это самая обычная функция. в которую компилятор неявно для программиста запихивает указатель this.
0
|
||||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||
| 21.12.2019, 00:18 | ||||
|
Что характерно, в стандартной терминологии типы указатель-на-член по определению НЕ являются указательными типами именно потому (!), что внутренняя структура и размер указателя-на-член не имеет ничего общего с обычными указателями. Поэтому ни о каких "синонимах", "переинтерпретациях" и "преобразованиях" речи быть не может. Причем, что характерно, компилятор MSVC++ прекрасно знает, что его реализация указателей-на-член неработоспособна, и предоставляет возможность включить работоспособную реализацию. Но вы, разумеется, не можете себе позволить пользоваться корректной реализацией, ибо тогда ваша "картонная дурылка" накроется медным тазом во все воронье горло
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||
| 21.12.2019, 00:39 | |||||
|
первые приводят рабочий код, который иллюстрирует возможность. вторые, несмотря на наличие рабочего примера, продолжают тупить, отказываясь признать: таки да, возможно. принципиально, что обращение к объекту некоторого типа, как к объекту другого типа - есть реинтерпритация. это - "глюк" как минимум всех топовых компиляторов: gcc/cl/clang и не надо заливать про опыт. в коде даже комментарий есть о незаконном преобразовании. такое впечатление, что ты не так и не врубился зачем был нужен этот пример. пример наглядно иллюстрирует:
0
|
|||||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 21.12.2019, 00:45 | ||
|
Я думаю, что здесь все уже ясно. Проку не будет. Я всегда говорил, что понимание концепций языков программирования - это вопрос "взрослости" студента. Пытаться объяснять их раньше времени - это примерно то же самое, что пытаться объяснять пятилетнему ребенку тонкости семейных отношений. Пока студент не "дорастет" до определенной стадии в своем развитии, сколько времени ни трать на вбивание в эту бошку знаний, пользы никакой не будет. Остается только надеяться, что все рано или поздно "дорастают" до этой стадии. Хотя и это, боюсь, не гарантировано.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 21.12.2019, 00:54 | ||
|
по видимому, не всем студентам дано это понять.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
| 21.12.2019, 00:57 [ТС] | |
|
0
|
|
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||
| 21.12.2019, 01:02 | ||
memcpy. Никак.Именно по этой причине ваша "картонная дурылка", который вы сами же и обманулись, может рассматриваться лишь как пример плохого юмора.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 21.12.2019, 01:09 [ТС] | ||
|
Какие виды адрессациии применяет компилятор при компиляции кода никакого отношения к языку C++ не имеют, хотя безусловно разработчики компиляторов делают своё решение максимально оптимально, а потому чтото во чтото запихнуться не может, но это никакого отношения к данному вопросу не имеет.
0
|
||
|
Вездепух
13207 / 6841 / 1823
Регистрация: 18.10.2014
Сообщений: 17,304
|
||||
| 21.12.2019, 01:11 | ||||
|
Процитированный вами отрывок говорит, что, например, lvalue типа void () можно [неявно] преобразовать к типу void (*)(). То есть к рассматриваемому вопросу он вообще никак не относится. К функциям-нестатическим членам класса это тоже не относится никак. Функции-члены класса не являются "lvalue of function type". "Lvalue of function type" в С++ по определению бывает только для самостоятельных функций. Добавлено через 1 минуту
1
|
||||
| 21.12.2019, 01:11 | |
|
std::string код работает в VS 6.0, но не работает в VS2012 (error C4996) ошибка error: cannot convert 'std::string {aka std::basic_string<char>}' to 'std::string* {aka std::basic_stri STL std::set, std::pair, std::make_pair Для заданной матрицы найти такие k и n, что сумма членов k-го столбца совпадает с суммой членов n-й строки
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Контроль уникальности строк в табличной части документа
Maks 18.06.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ПланированиеСпецтехники" с табличной частью "НаличиеОборудования", разработанного в КА2.
Задача: контроль уникальности строк в. . .
|
Клиент
Uhbif79 18.06.2026
Здесь простой клиент для работы с сервером.
|
Сервер
Uhbif79 18.06.2026
Выкладываю простейший сервер.
|
Дефенестрация
kumehtar 18.06.2026
Узнал интересное слово. Дефенестрация. Это когда ты выбрасываешь кого-либо или что-либо из окна. Возьму на вооружение)))
|
|
Дихотомия добра и зла
kumehtar 18.06.2026
Как Дзен-буддисты говорят о добре и зле: не нужно воевать против зла, нужно воевать против невежества. Тогда добро станет ествественным, и поэтому вечным. Но дело в том, что невежество всё время. . .
|
Своя Интернет-Компания
iceja 18.06.2026
Я программист с экономическим образованием, пишу свой проект, это SaaS для бизнесов. Мне нужен co-founder с высшим экономическим образованием, и/ или инвестор. Сейчас проект в интенсивной разработке,. . .
|
24 Мат модель здравосохранения: функциональные требования к строительству пищеблока
anaschu 18.06.2026
СРесурсами1: финансовый SD-контур, калькулятор функциональных требований пищеблока
Сегодня разделили затраты в агенте Экономика по образцу модели НАСОСЫ, добавили расчёт ROI и построили первый. . .
|
23. что сделано за последнее время.
anaschu 17.06.2026
• Эталон: Клиника НИИ питания РАМН, Москва — централизованный пищеблок, 225 коек, 180 пациентов
• Git: репозиторий med2, ветка абсентеизм. Рабочий файл: СРесурсами1_v4. alp
• Смежный проект:. . .
|