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

Alexander
18.09.2018
13:37:04

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

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

Anatoly
18.09.2018
16:05:18

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

Anatoly
18.09.2018
16:06:18

Ioann V
18.09.2018
16:06:58
таккккк ииии?? Ведь в обычную функцию мы можем накидать разношерстные функции, а вот в указатель член...
мы ведь можем сделать std::function<void()> и сюда закинуть функцию что int возвращает.
это удобно, да. А что на счет указателей на мембры?

Google

Ilia
18.09.2018
16:11:24

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

Ioann V
18.09.2018
16:12:44

Ilia
18.09.2018
16:12:52

Ioann V
18.09.2018
16:13:25

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

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

Igor
18.09.2018
16:25:56

Побитый
18.09.2018
16:26:05

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

Ioann V
18.09.2018
16:27:46

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
а что тогда есть?

Ilia
18.09.2018
16:32:59

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

Побитый
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

Побитый
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

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

Ioann V
18.09.2018
16:35:57

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

Ilia
18.09.2018
16:53:01

Igor
18.09.2018
16:53:53

Александр
18.09.2018
16:56:56

A.D.
18.09.2018
16:59:54

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 штук

Ilia
18.09.2018
17:04:32

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

Ilia
18.09.2018
17:05:03

Ioann V
18.09.2018
17:05:16

Google

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

Ilia
18.09.2018
17:06:35

Ioann V
18.09.2018
17:07:21

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

Ioann V
18.09.2018
17:08:22

Вячеслав
18.09.2018
17:20:54

Alexander
18.09.2018
17:22:05