|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
|
std::is_invokable не работает для фунций членов19.12.2019, 16:08. Показов 8074. Ответов 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 | |
|
0
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 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
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
|
| 20.12.2019, 22:39 | |
|
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 20.12.2019, 22:46 | ||
|
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 20.12.2019, 23:13 | ||
|
(Непонятно даже, зачем вы занимались всеми этими ненужными манипуляциями с указателями в своем примере, если ту же самую "картонную дурылку" можно было получить единственным вызовом memcpy.)
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 20.12.2019, 23:16 [ТС] | ||
|
За такое по рукам многие тимлиды надают.
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
|||
| 20.12.2019, 23:23 | |||
memcpy? Ах, сорри, я забыл: std::memcpy.Разумеется, любой человек с мало мальским практическим опытом в С++ сразу заметит, что размер указателя на метод в корректной реализации обычно отличается от размера обычного указателя на функцию, по каковой причине никакой переинтерпретацией или преобразованием, как ни верти, первый во второй запихнуть не получится.
0
|
|||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||||
| 20.12.2019, 23:31 [ТС] | ||||
0
|
||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||||
| 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
|
||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||||
| 21.12.2019, 00:18 | ||||
|
Что характерно, в стандартной терминологии типы указатель-на-член по определению НЕ являются указательными типами именно потому (!), что внутренняя структура и размер указателя-на-член не имеет ничего общего с обычными указателями. Поэтому ни о каких "синонимах", "переинтерпретациях" и "преобразованиях" речи быть не может. Причем, что характерно, компилятор MSVC++ прекрасно знает, что его реализация указателей-на-член неработоспособна, и предоставляет возможность включить работоспособную реализацию. Но вы, разумеется, не можете себе позволить пользоваться корректной реализацией, ибо тогда ваша "картонная дурылка" накроется медным тазом во все воронье горло
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||
| 21.12.2019, 00:39 | |||||
|
первые приводят рабочий код, который иллюстрирует возможность. вторые, несмотря на наличие рабочего примера, продолжают тупить, отказываясь признать: таки да, возможно. принципиально, что обращение к объекту некоторого типа, как к объекту другого типа - есть реинтерпритация. это - "глюк" как минимум всех топовых компиляторов: gcc/cl/clang и не надо заливать про опыт. в коде даже комментарий есть о незаконном преобразовании. такое впечатление, что ты не так и не врубился зачем был нужен этот пример. пример наглядно иллюстрирует:
0
|
|||||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 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
|
|
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||
| 21.12.2019, 01:02 | ||
memcpy. Никак.Именно по этой причине ваша "картонная дурылка", который вы сами же и обманулись, может рассматриваться лишь как пример плохого юмора.
0
|
||
|
13 / 13 / 1
Регистрация: 19.10.2019
Сообщений: 607
|
||
| 21.12.2019, 01:09 [ТС] | ||
|
Какие виды адрессациии применяет компилятор при компиляции кода никакого отношения к языку C++ не имеют, хотя безусловно разработчики компиляторов делают своё решение максимально оптимально, а потому чтото во чтото запихнуться не может, но это никакого отношения к данному вопросу не имеет.
0
|
||
|
Вездепух
13210 / 6843 / 1824
Регистрация: 18.10.2014
Сообщений: 17,308
|
||||
| 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 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|