@ProCxx

Страница 2357 из 2477
Vitaly
18.09.2018
13:16:32
Прекращайте флудить не по теме чата. Для этого есть @pro_prog.

Yarique
18.09.2018
14:31:18
https://godbolt.org/z/ysPvfX Пастебин сломался. Поэтому godbolt Почему permission denied?

Без copy elision из c++17 оно не компилится

Google
Yarique
18.09.2018
14:43:51
Я в чруте пытался создать mutex межпроцессный

Вот в чем был косяк: надо было из под рут запускать для чрут моей

Ioann V
18.09.2018
15:14:41
то есть, можно ли имея указатель на функцию член класса, но с возвращаемым типом int, закинуть в массив тех же указателей, но с возвращением void. Например заюзав реинтерпрет каст?

Если нельзя, то почему? Указатель на функцию член, это же просто смещение, и когда мы приравниваем его к кому то там значению, мы его ж дефакто сохраняем?

Anatoly
18.09.2018
16:04:39
то есть, можно ли имея указатель на функцию член класса, но с возвращаемым типом int, закинуть в массив тех же указателей, но с возвращением void. Например заюзав реинтерпрет каст?
а давай немного пофантазирует на тему как возвращается результат выполнения функцию вызывающей стороне и уже от этого будем плясать.

Ioann V
18.09.2018
16:05:01
по стеку ж возвращается.

Anatoly
18.09.2018
16:05:18
по стеку ж возвращается.
кто этот стек "очищает"

Ioann V
18.09.2018
16:06:07
сама функция и чистит. Но по факту зависит от соглашения о вызове функции.

Ioann V
18.09.2018
16:06:58
таккккк ииии?? Ведь в обычную функцию мы можем накидать разношерстные функции, а вот в указатель член...

мы ведь можем сделать std::function<void()> и сюда закинуть функцию что int возвращает.

это удобно, да. А что на счет указателей на мембры?

Google
Ioann V
18.09.2018
16:11:33
почему?

Ilia
18.09.2018
16:11:52
почему?
Потому что разные типы возврата будут.

Ioann V
18.09.2018
16:11:55
почему с обычными std function можно, а с этим - нет?

Anton
18.09.2018
16:12:41
почему с обычными std function можно, а с этим - нет?
Полагаю потому, что вызываемая функция должна знать, сколько байт занимает возвращаемый тип, что б корректно его со стека вычистить

Ioann V
18.09.2018
16:12:44
Потому что разные типы возврата будут.
я то с этой логикой согласен, да. Тем не менее.

Ilia
18.09.2018
16:12:52
почему с обычными std function можно, а с этим - нет?
С обычным указателем точно так же нельзя, мы же полутра на это потратили, тебе написали кажется три релазиации этого.

Ilia
18.09.2018
16:13:59
Ты не можешь взять одну фукцнию, что-то возвращающую, реинтерпретировать её в указатель на фукнцию, не возвращающую ничего, и потом вызывать.

Ioann V
18.09.2018
16:14:19
Нет
а что тогда в примерах выше??

Ilia
18.09.2018
16:17:46
Нет
Ты не понимаешь. std::function -- это шаблон. Компилятор выдит тип данной функции std::function которая (он в объявлении), и видит тип вкладываемой функции. Видит, что они разные и автоматом геренирует обёртку (я про последнее не уверен, но это моя интуитивная догадка), И таким образом возврат реально вызываемой функции корректро игнорируется. То же было утром с лямбдами, за счёт перевызова в лямбде возврат вызываемой функции корректно игнорировался. Ты же хочешь просто так сказать "ЭТО-- ЭТО ТО", и вызвать. При этом одна функция что-то вернёт, а другая это не воспримит, и будет UB.

Я на вскидку не скажу, Почему тут UB.

Ioann V
18.09.2018
16:20:14
ну вообще говоря, я тебя понимаю. Тем не менее именно пример с std function выше, заставляет меня задуматьсь как это работает. Я же пришел не с утвержлением, что так можно, а с вопросом можно ли и почему. Вот у тебя есть догадка, того как это происходит в std function, но может есть у кого не догадки?

Догадка это ведь тоже, не ответ

Ilia
18.09.2018
16:20:55
Я почти уверен, что именно так и происходит

Да и нахрена тебе нынче std::function, когда есть лямбды?

Ioann V
18.09.2018
16:21:28
Ну, в мире cxx все подтвержается стандартом же!

Google
Ilia
18.09.2018
16:23:53
Пушо в контейнере хороню.
Ну лямбду точно также можно в контейнер...

Догадка это ведь тоже, не ответ
Вот гляди, https://en.cppreference.com/w/cpp/utility/functional/function/operator()

Ioann V
18.09.2018
16:24:32
а контейнер то у меня типов std function будет. А все остальное, да можно лямбдами. Но я ж пошире делаю. И чтоб то и другое было.

Igor
18.09.2018
16:25:56
Побитый
18.09.2018
16:26:05
Ну лямбду точно также можно в контейнер...
Разве можно? Вроде ж только через variant?

Ilia
18.09.2018
16:26:33
Это то, что ты вызываешь из std::function. operator (). Он генерируется с такими параметрами и кодом возврата, что ты объявляешь при инстанциации этого шаблона. НО вызывать при этом он может всё, что угодно, ограничение только одно -- параметры должны совпадать по типам и порядку (либо типы должны быть приводимы один к другому). Иначе не скомпилируется.

Ilia
18.09.2018
16:28:02
в какой? vector<lambda>?
Там надо будет описать тип функции, сигнатуры которой будут у лямбд, и её хранить в векторе. А лямбды будут к ней приводиться. При этом лямбды должны быть БЕЗ ЗАХВАТОВ!

Igor
18.09.2018
16:32:02
уже нету (deprecated in C++11) (removed in C++17)

Ilia
18.09.2018
16:32:21
А, ну и ладно.

Ioann V
18.09.2018
16:32:39
а что тогда есть?

Ioann V
18.09.2018
16:33:00
тупо в лямбду оборачивать таки или биндить?

Про member function у тебя ещё сильнее мозг взорвёт...
я бы не сказал, что он взрывается.

Побитый
18.09.2018
16:33:18
mem_fn =)

https://en.cppreference.com/w/cpp/utility/functional/mem_fn Тут не сказано, что deprecated

Ilia
18.09.2018
16:33:45
Тогда вопрос по мембрам функций класса - звучит так, а нету ли чего похожего уже в цхх, как std function ток для мембров?
Просто легче их тоже лямбдами эмулировать. НАписать маленькую лямбду-врапер.

Побитый
18.09.2018
16:34:50
Да std::mem_fn есть

Google
Ilia
18.09.2018
16:34:55
Хотя... может я и не прав

Ioann V
18.09.2018
16:35:19
https://en.cppreference.com/w/cpp/utility/functional/mem_fn Тут не сказано, что deprecated
окей. Спасибо. Илье тоже спасибо. Меня скорее интересует как это работает и почему, а не как проще и т.п

Побитый
18.09.2018
16:35:33
Тока он не std::function походу возвращает

Ioann V
18.09.2018
16:35:57
Александр
18.09.2018
16:36:03
уже нету (deprecated in C++11) (removed in C++17)
Убрали древний mem_fun, а mem_fn - это из C++11

ну mem fun это то еще из 0х98
mem_fun - это древний ещё до c++11, mem_fn - это новое. Это аналог нового bind для которого не нужно указывать placeholders. Возвращает он (как и bind) какой-то внутренний тип, умеющийся вызываться с дополнительным первым аргументом. Этот тип уже можно обернуть в соответстсвующую std::function. Например: https://wandbox.org/permlink/q8BJ5Ag1v9vy3ctO

Igor
18.09.2018
16:53:53
Убрали древний mem_fun, а mem_fn - это из C++11
Чет прям всхихикнулось с этого

A.D.
18.09.2018
16:59:54
Можно: https://wandbox.org/permlink/EzDPZmXugAtWgB1P
а можно для одаренных: это работает, но это UB?

Ioann V
18.09.2018
17:03:08
Да
а как тогда, стд фанкшн с одним возвратом, точнее с войдом, можно ему приравнять функцию с другим?

Ostap
18.09.2018
17:03:40
Всем привет, у меня очень простой вопрос: я собрал себе zapcc, но у него поиск дефолтных хедеров как-то не правильно работает. Зная, что он использует кланг я пишу zapcc -v -E -x c - в консоле и вот, что возвращается

Ioann V
18.09.2018
17:04:03
неужели там реально обертка генерится? тогда это бьет по перфомансу.

Ostap
18.09.2018
17:04:07
#include "..." search starts here: #include <...> search starts here: /usr/local/include /home/ostap/dev/libs/zapcc/build/lib/clang/7.0.0/include /usr/include/x86_64-linux-gnu /usr/include

Ioann V
18.09.2018
17:04:28
а ведь можно придумать ситуацию, когда таких оберток будет k штук

Ostap
18.09.2018
17:04:50
Первый в списке идет /usr/local/include, а мне нужно, что бы была вторая строка

Как исправить?

Ioann V
18.09.2018
17:05:16
Нет, она может инлайнится.
вот тут бы подробнее узнать. Ща погуглю, но если кто знает чего, пишите?

Google
Ioann V
18.09.2018
17:05:41
Нет.
ды дааа же, чего нет то? вон же вандабокс с примером.

Ilia
18.09.2018
17:06:35
вот тут бы подробнее узнать. Ща погуглю, но если кто знает чего, пишите?
Что тут знать? функция шаблонная, генерируется в каждом исходном модуле, тело доступно, если нужно, заинлайнить её раз плюнуть. Но при этом возврат всё равно будет корректно игнорироваться

Ilia
18.09.2018
17:07:46
Но чтобы она НЕ заинлайнилась, нет причин

Вячеслав
18.09.2018
17:20:54
Alexander
18.09.2018
17:22:05
Как исправить?
-isystem path to your headers

Страница 2357 из 2477