Форум программистов, компьютерный форум CyberForum.ru

Перенаправление указателя при перегрузке оператора в variadic template - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Голосовое управление. Активация записи http://www.cyberforum.ru/cpp/thread1424001.html
Здравствуйте! Хочу добавить в свой проект умного дома голосовое управление. Нужно несколько команд - включить свет/выключить свет/открыть жалюзи и т.д. С распознаванием команды проблем быть не должно, распознавать можно через гугл или яндекс. Вопрос в том, как активировать распознавание? У меня пока что только такая мысль: при появлении звука в микрофоне записывать его, а после окончания...
C++ RAW сокет нужен рабочий пример создания сырого сокета З.ы под windows Добавлено через 20 минут нашел такой код, под хрюшей работает збс, но в 7 неработает, как можно это исправить? и можно ли это исправить вообще? #include <Winsock2.h>//Ws2_32.lib #include <ws2tcpip.h> //#include <Windows.h> #include <iostream.h> http://www.cyberforum.ru/cpp/thread1423999.html
Молодой поэт и программирование C++
Всем доброго времени суток!!!! Я на форуме первый день надеюсь, что мне помогут или дадут хороший совет. Мне надо написать программу или что-то вроде нее, которая решает мою проблему. Я почти всю свою жизнь пишу стихи. Но стихи эти непростые. Они написаны строчными буквами и без знаков препинания(нет ни точек, ни тире,ни запятых). Когда я печатаю текст то пишу сначала как надо для читателя, а...
ГОСТ для C++ C++
Ребят как правильно оформлять код программы, по какому госту?!
C++ Настройка Oracle Solaris Studio под Windows http://www.cyberforum.ru/cpp/thread1421315.html
скачал Oracle Solaris Studio но похоже она только для Solaris, OpenSolaris, Linux - есть ли возможность её Microsoft Windows ?
C++ Построить таблицу, содержащую проценты голосов, отданных командам Помогите пожалуйста, не могу запустить. Выбивает постоянно ошибку при запуске и не могу понять почему. Вот условие: В спортивных соревнованиях участвуют n команд. В файле SPORT содержатся прогнозы результатов соревнований. Каждый прогноз включает номер команды, занявшей первое место, номер команды, занявшей последнее место, номера команд, входящих в первую тройку сильнейших команд.... подробнее

Показать сообщение отдельно
Izual
94 / 119 / 6
Регистрация: 13.11.2012
Сообщений: 1,551
26.04.2015, 16:43  [ТС]     Перенаправление указателя при перегрузке оператора в variadic template
DrOffset, да дизассембл интересная вещь... Жаль что твой пример, по крайней мере мне, сложно понять...
C++
1
2
test (*fp)() = (test(*)())foo1;
    return fp().d;
Это какой то лес =)

Собственно пока я тут копаюсь, накопалось оказывается, что без указания типа оператор double не срабатывает вообще. Т.е. на сколько я понял:
С таким подходом:
C++
1
call(v[0][4].d.vp, v[1][2].d, v[1][3].d);
Получается:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
0101B0BC  mov         eax,4  
0101B0C1  shl         eax,0  
0101B0C4  mov         ecx,10h  
0101B0C9  imul        edx,ecx,3  
0101B0CC  mov         ecx,dword ptr ds:[1021324h]  
0101B0D2  mov         eax,dword ptr [ecx+eax]  
0101B0D5  mov         ecx,dword ptr [eax+edx+0Ch]  
0101B0D9  push        ecx  
0101B0DA  mov         edx,dword ptr [eax+edx+8]  
0101B0DE  push        edx  
0101B0DF  mov         eax,4  
0101B0E4  shl         eax,0  
0101B0E7  mov         ecx,10h  
0101B0EC  shl         ecx,1  
0101B0EE  mov         edx,dword ptr ds:[1021324h]  
0101B0F4  mov         eax,dword ptr [edx+eax]  
0101B0F7  lea         ecx,[eax+ecx+8]  
0101B0FB  push        ecx  
0101B0FC  mov         edx,4  
0101B101  imul        eax,edx,0  
0101B104  mov         ecx,10h  
0101B109  shl         ecx,2  
0101B10C  mov         edx,dword ptr ds:[1021324h]  
0101B112  mov         eax,dword ptr [edx+eax]  
0101B115  mov         ecx,dword ptr [eax+ecx+8]  
0101B119  push        ecx  
0101B11A  call        call<var::<unnamed-type-d>,var::<unnamed-type-d> > (0101150Ah)  
0101B11F  add         esp,10h
А с таким:
C++
1
call(v[0][4].d.vp, (double)v[1][2].d, v[1][3].d);
Вот что:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
01145B7C  mov         eax,4  
01145B81  shl         eax,0  
01145B84  mov         ecx,10h  
01145B89  imul        edx,ecx,3  
01145B8C  mov         ecx,dword ptr ds:[1151324h]  
01145B92  mov         eax,dword ptr [ecx+eax]  
01145B95  mov         ecx,dword ptr [eax+edx+0Ch]  
01145B99  push        ecx  
01145B9A  mov         edx,dword ptr [eax+edx+8]  
01145B9E  push        edx  
01145B9F  mov         eax,4  
01145BA4  shl         eax,0  
01145BA7  mov         ecx,10h  
01145BAC  shl         ecx,1  
01145BAE  mov         edx,dword ptr ds:[1151324h]  
01145BB4  mov         eax,dword ptr [edx+eax]  
01145BB7  lea         ecx,[eax+ecx+8]  
01145BBB  call        var::<unnamed-type-d>::operator double & (0114150Fh)  
01145BC0  push        eax  
01145BC1  mov         ecx,4  
01145BC6  imul        edx,ecx,0  
01145BC9  mov         eax,10h  
01145BCE  shl         eax,2  
01145BD1  mov         ecx,dword ptr ds:[1151324h]  
01145BD7  mov         edx,dword ptr [ecx+edx]  
01145BDA  mov         eax,dword ptr [edx+eax+8]  
01145BDE  push        eax  
01145BDF  call        call<double,var::<unnamed-type-d> > (01141514h)  
01145BE4  add         esp,10h
Хотя почему они все dword я ещё не вкурил...

Добавлено через 13 минут
Ну и естественно из за этого сам шаблон уже по другому вопринимает данные. Без типа:
Assembler
1
2
3
4
5
6
7
8
00942FC0  call        __RTC_CheckEsp (0941370h)  
00942FC5  mov         dword ptr [ebp-0CCh],eax  
00942FCB  mov         dword ptr [ebp-0C8h],edx  
00942FD1  mov         edx,dword ptr [r]  
00942FD4  mov         eax,dword ptr [ebp-0CCh]  
00942FDA  mov         dword ptr [edx],eax  
00942FDC  mov         ecx,dword ptr [ebp-0C8h]  
00942FE2  mov         dword ptr [edx+4],ecx
С типом:
Assembler
1
2
3
00FF2FC0  call        __RTC_CheckEsp (0FF1370h)  
00FF2FC5  mov         edx,dword ptr [r]  
00FF2FC8  fstp        qword ptr [edx]
Как ты и сказал, похожая ситуация.

Добавлено через 7 минут
Цитата Сообщение от DrOffset Посмотреть сообщение
либо придется повторить их путь, либо бросить эту затею
Может есть обходной кстати вариант. Например меня одолевает мысль, что т.к. в принципе я имею в структуре уже известный тип, то можно было бы приводить аргументы в шаблоне. (static_cast'ом чтоль, это хоть и по коду займёт место, но зато это предполагаю будет эмулировать поведения для опр. типа, и тут уже я смогу и колдовать сразу с указателями, как в общем то я и хотел сделать с double)

Добавлено через 17 часов 12 минут
Цитата Сообщение от Nick Alte Посмотреть сообщение
Функция call. Она получает указатель на функцию, у которого выдрана вся информация об аргументах и возвращаемом значении.
Оказалось что прототип функции в шаблоне действительно себя странно ведёт.
C++
1
using func_type = Result(_cdecl *)(Args...); // прототип функции
Заменив Result (т.е. тип union) на double получил в дизассембле qword...
Лан, ушёл дальше ковыряться)
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru