=A=L=X=
> По стандарту любой указатель может быть приведен в void * чтобы потом без
> ошибок быть обратно приведенным к оригиналу. Похоже всё таки он что-то сделал
> не так.
Ну да, я тоже про это подумал, что можно сделать (МyClass*)((void*)Ptr).
Но если тип указателя сохранен и приводится к другому несовместимому типу, то компилер может ругаться.
dedm0zaj
Вопрос, так в коде (MyClass*)Ptr или (MyClass)Ptr ?
Во втором случае это локальный обьект в статической памяти.
dedm0zaj
> в поточной функции преобразовываю поинтер (lpParam) обратно в мой класс. и вот
> тут (MyClass)lpParam не наботает. нужен reinterpret_cast
void* можно преобразовывать static_cast-ом в любой указатель, зачем тут вообще реинтерпрет?
dave
> Во втором случае это локальный обьект в статической памяти.
да, конечно (MyClass*)lpParam.
уже путаю с паскалевскими ссылочными классами
dedm0zaj
> предоставлю, как дома буду. но лучше пример с потоком, ибо он проще.
Я х/з о чём, ты, я вот специально обмазал класс виртуальным наследованием, чтобы ну совсем и вообще, и как то так вот: http://ideone.com/aDZxUA
> (MyClass)Ptr
>локальный обьект
Хотя не, просто хрень будет.
Пока искал информацию по соседней теме (про callcc) наткнулся на нежелание компилятора кастовать лямбду к указателю на функцию для вывода типов аргументов.
Нашёлся и хак для обхода: http://ideone.com/Kmmr9B (смотреть на плюс перед списком захвата лямбды)
А нормальные способы есть?
dedm0zaj
> допустим создаю поток внутри класса с помощью CreateThread
std::thread ? не, не слышал.
Merrewend
> А нормальные способы есть?
Хм, можно немного обернуть хак http://ideone.com/GXgZRo
вообще раз такая пьянка пошла... я тоже кое чего не понимаю
вот например
Merrewend
> http://ideone.com/Kmmr9B
там же не правильный перфект форвардинг
правильный вот такой
template<typename R, typename... Args> auto foo(R ( *bar)( Args...), Args && ... args) { return bar( std::forward<Args>( args)...); }
template<typename F, typename... Args> auto foo(F && f, Args && ... args) { return std::forward<F>( f)( std::forward<Args>( args)...); }
Kartonagnick
> std::thread
Под ведро уже работают?
я на счет форвардинга еще почему интересуюсь.. у этого товарища который callcc пилит...
этот форвардинг в куче мест не правильно заюзан
https://github.com/boostorg/context/blob/develop/include/boost/co… tion.hpp#L346
и практически везде где Arg ... такая фигня...
может я чего та все таки не понимаю?
cNoNim
> там же не правильный перфект форвардинг
Каюсь, не силён в универсальных ссылках, бездумно скопипастил отсюда
https://github.com/boostorg/context/blob/develop/include/boost/co… tinuation.hpp
template< typename ... Arg > continuation operator()( Arg ... arg) { BOOST_ASSERT( nullptr != t_.fctx); auto tpl = std::make_tuple( std::forward< Arg >( arg) ... );
cNoNim
> а на счет нормальный способ он вот
Так не честно )
Ключевые слова были "для вывода типов аргументов"
Вот, например, нам нужно узнать типы аргументов, а вызывать пока не нужно и аргументы для вызова не передаём
http://ideone.com/55pKeW
cNoNim
> я на счет форвардинга еще почему интересуюсь.. у этого товарища который callcc
> пилит...
Вот-вот )
Может это из-за того, что везде применяется для передачи в создавалку тупла, а не в пользовательскую функцию с неизвестным типом?
Merrewend
> бездумно скопипастил отсюда
так я вот на тот же код смотрю и не пойму может надо пулл реквест бежать писать )
вот мой говнокод таймера
*.h
*.cpp
в функции CreateThread третьим параметром передаю this класса, который потом возвращаю в виде параметра IpParam
Тема в архиве.