@ProCxx

Страница 2061 из 2477
Ruslan
18.05.2018
09:15:40
Пусть даже не компилирующийся

Igor
18.05.2018
09:20:32
https://www.youtube.com/watch?v=AeEwxtEOgH0 - свежий толк про оптимизации и UB от John Regehr

Google
isnullxbh
18.05.2018
09:26:50
Ruslan
18.05.2018
09:31:27
https://pastebin.com/fxL7LrZj
Ну, вот и передай в glutDisplayFunc binding.target ()

isnullxbh
18.05.2018
09:31:38
Не рабит ))

Spoonson
18.05.2018
09:32:30
это не может заработать принципиально

Sheldon
18.05.2018
09:32:39
https://ideone.com/7HEY7N
Вот же. Сегфолт там, потому что указатель на this нужен

Ruslan
18.05.2018
09:33:27
Не рабит ))
Не работает или не собирается

Sheldon
18.05.2018
09:33:34
это не может заработать принципиально
Гипотетически может. Можно в рантайме нужную функцию скомпилировать. :D

isnullxbh
18.05.2018
09:34:11
Ruslan
18.05.2018
09:34:30
Не собирается.
Ну, показывай ошибки чтоли

Spoonson
18.05.2018
09:35:32
блин, да какие ошибки? Ясно почему не собирается - потому что тип функции который хочет глютовая функция отличается - она не хочет указатель на метод класса, она хочет сырой указатель на функцию

isnullxbh
18.05.2018
09:35:49
> target() error: no matching function for call to ‘std::function<void()>::target()’ > target < void() >) error: invalid use of const_cast with type ‘void (*)()’, which is a pointer or reference to a function type return const_cast<_Functor*>(__func);

Google
isnullxbh
18.05.2018
09:38:16
Лучший подход к решению - не использовать glut.
Мне всего-то нужно cv::Mat отобразить)

Alexander
18.05.2018
09:41:01
Мне всего-то нужно cv::Mat отобразить)
ну так отобрази через imshow ?

Sheldon
18.05.2018
09:43:22
А что посоветуете?)
glfw, как вариант. Вообще в opencv есть "встроенные" способы отображения, как пишут выше.

isnullxbh
18.05.2018
09:47:04
ну так отобрази через imshow ?
Не получится. Я юзаю библиотеку (nuitrack) которая собрана с определенной версией OpenCV (2.4), и поставляется вместе с so-шками. Это вынуждает меня использовать opencv 2.4. Хэдеры нужные то я забрал с гитхаба, а вот либы... т.к. они не использует большую часть фунционала, то большей части либ нет. В частности, есть libopencv_highgui.so.2.4 d в которой nm показывает наличие символа imshow, но при сборке я получаю undefined reference.

target<void()>()
Это хорошо, а пруфы есть?

Ruslan
18.05.2018
09:48:01
Это хорошо, а пруфы есть?
У меня собирается

Alexander
18.05.2018
09:48:38
символы по разному манглируются и не может найти нужный

Ruslan
18.05.2018
09:49:19
Это хорошо, а пруфы есть?
https://wandbox.org/permlink/fqUjZtLOXmVRZ9HM

isnullxbh
18.05.2018
09:51:11
Нет, нельзя. Страдай.
Ахаха)) Спасибо, друг ))

Friedrich
18.05.2018
09:53:00
https://wandbox.org/permlink/fqUjZtLOXmVRZ9HM
Ну ток при попытке вызвать такую функу у тебя будет сегфолт.

isnullxbh
18.05.2018
09:53:01
символы по разному манглируются и не может найти нужный
Ок, но другие то ф-ии я могу дергать. Можно было бы собрать у себя нужные либы, но хз как будут обстоять дела из-за манглинга.

Friedrich
18.05.2018
09:53:28
Во всяком случае, у меня сегфолт: https://wandbox.org/permlink/ll6tiaiqxIQS5X1n

Google
Alexander
18.05.2018
09:53:38
но там уже сам гадай, что я могу сказать

isnullxbh
18.05.2018
09:53:53
Spoonson
18.05.2018
09:56:13
https://wandbox.org/permlink/fqUjZtLOXmVRZ9HM
https://wandbox.org/permlink/cuMa8cqWsAc4u8EV

http://en.cppreference.com/w/cpp/utility/functional/function/target A pointer to the stored function if target_type() == typeid(T), otherwise a null pointer.

Ruslan
18.05.2018
09:59:04
Sheldon
18.05.2018
09:59:34
Не должно, если объекты живые
Там объектам неоткуда взяться

Friedrich
18.05.2018
09:59:37
Не должно, если объекты живые
Уверен? Я просто не понимаю, как этот target работает. Мне кажется, он там в итоге просто делает невалидный каст!

Spoonson
18.05.2018
09:59:55
он возвращает nullptr

Friedrich
18.05.2018
10:00:01
А, он вообще nullptr вернул, мило.

Spoonson
18.05.2018
10:00:05
потому что каст невалидный

Ruslan
18.05.2018
10:00:08
Spoonson
18.05.2018
10:00:28
а что по твоему есть бинд?

Friedrich
18.05.2018
10:00:30
Не должно, если объекты живые
Ты почитай, чо оно делает — оно возвращает просто указатель на низлежащую функу

Т.е. без бинда

Ruslan
18.05.2018
10:00:44
Бтнд выше

Бинд*

Friedrich
18.05.2018
10:01:07
Бтнд выше
Ну ты понимаешь же, что оно не будет работать?

Тебе нужно в рантайме скомпилировать код, чтобы получить нужное поведение.

Такой facility у нас пока нету.

Google
Ruslan
18.05.2018
10:02:33
Такой facility у нас пока нету.
Там проблема в лямбде и только

Friedrich
18.05.2018
10:02:56
Там проблема в лямбде и только
Нет, не только. Попробуй туда засунуть указатель на мембер.

Ruslan
18.05.2018
10:03:13
Сам механизм передачи сырого указателя валиден

Sheldon
18.05.2018
10:03:27
Там проблема в лямбде и только
Как у тебя так легко получается игнорировать 3 линка на онлайн-компиляторы с сегфолтами в выводе?

Friedrich
18.05.2018
10:03:47
Там проблема в лямбде и только
Проблема там в том, что человек хочет внутри функи иметь контекст, а API ему этот контекст не предоставляет.

Ruslan
18.05.2018
10:04:11
Как у тебя так легко получается игнорировать 3 линка на онлайн-компиляторы с сегфолтами в выводе?
Я пока не могу настолько отвлечься от работы, чтобы детальный солюшен сделать

Friedrich
18.05.2018
10:04:18
Через лямбду ли, через мембер-функу, через функциональный объект или ещё как — не принципиально. Потому что никак не получится без глобальных переменных.

Ну или кодегена в рантайме, да.

Admin
ERROR: S client not available

Friedrich
18.05.2018
10:05:14
Ruslan
18.05.2018
10:05:26
Поинтер

А не функтор

Такой же адрес в памяти

Antony
18.05.2018
10:05:44
Мини новость: В clang решили последнюю багу, мешающую сборке ядра Linux https://bugs.llvm.org//show_bug.cgi?id=24487

Friedrich
18.05.2018
10:05:50
Поинтер на мембер в контексте вызова отличается тем, что для вызова ему нужно положить дополнительный аргумент.

Ruslan
18.05.2018
10:06:03
Если объекты валиднв то произойдёт обычный вызов

Friedrich
18.05.2018
10:06:04
Если ему не положат аргумент, а он попытается его прочитать — точно получится ерунда.

Alexander
18.05.2018
10:06:28
Мини новость: В clang решили последнюю багу, мешающую сборке ядра Linux https://bugs.llvm.org//show_bug.cgi?id=24487
I'll test it tomorrow (it takes some time for me to compile the whole toolchain). This was probably the last bug preventing me from compiling a mainline Linux kernel for x86 with clang.

probably

Google
Friedrich
18.05.2018
10:06:39
Если объекты валиднв то произойдёт обычный вызов
Бро, ты вот реально щас или бредишь, или мы тебя тут все совсем неправильно поняли. Потому что у нас объекты валидны, но target возвращает nullptr и вообще сегфолт.

Alexander
18.05.2018
10:07:05
но новость определённо хорошая.

можно будет бенчить, какое ядро шустрее работает и так далее

Friedrich
18.05.2018
10:07:54
Вернёмся к этому позже, ок? Не могу продолжать дискуссию сейчас
Давай отложим, без проблем. Мне кажется, у тебя есть какой-то хитрый трюк с этими таргетами, который сможет решить какой-то другой класс проблем. Было бы интересно посмотреть.

Antony
18.05.2018
10:09:17
можно будет бенчить, какое ядро шустрее работает и так далее
Пока бенчить рано. Там часть оптимизаций и хитрых флажков для ядра clang не поддерживает. Так что сборка ядра в лайтовом режимме, без успер ихтрого ассемблера

Igor
18.05.2018
10:09:41
Antony
18.05.2018
10:10:01
там есть ссылка на метабаг, в нем пачка проблем с оптимизацией

Friedrich
18.05.2018
10:10:15
:) Мгг) Я надеялся, мне что-то другой подскажут, т.е. некий другой подход к решению это проблемы )
Если у тебя глобальный контекст один — ты можешь в глобальную переменную его положить, вот тебе «решение».

Alexander
18.05.2018
10:10:15
о, доклады с нау начали выкладывать!
да, они шустро работают ?

Constantine
18.05.2018
10:11:41
Александр
18.05.2018
10:17:30
Спасибо!)
обычно библиотеки имеют дополнительный аргумент = контекст. проблема в таком случае решается просто. в случае glutDisplayFunc - увы

Friedrich
18.05.2018
10:21:27
обычно библиотеки имеют дополнительный аргумент = контекст. проблема в таком случае решается просто. в случае glutDisplayFunc - увы
Вот да, это верно. Вариант с контекстом, кажется, можно заврапать, чтоб он кушал произвольные функторы. А без контекста — фигушки.

Александр
18.05.2018
10:21:43
причем врапается очень красиво и без проблем

Max
18.05.2018
10:23:22
ну или воидстар на худой конец

сишники как понапишут так хоть стой хоть падай

Александр
18.05.2018
10:24:07
удивительно. даже в сраном кокосе и то коллбеки были как std::function
я про сишные говорил - там void* context, а в плюсовых конечно что-нибудь std::function 'шное

Friedrich
18.05.2018
10:24:27
сишники как понапишут так хоть стой хоть падай
Ну нет, обычно они эти моменты нормально пишут. Это только у нас тут случай какой-то вопиющий с GLUT.

isnullxbh
18.05.2018
10:24:44
обычно библиотеки имеют дополнительный аргумент = контекст. проблема в таком случае решается просто. в случае glutDisplayFunc - увы
Вы имеете ввиду, все было проще, если бы у callback'а был второй аргумент c типом, скажем, void* ?

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