@ProCxx

Страница 250 из 2477
Mr.
28.06.2016
15:04:53
Бля, другими словами хочу сделать что-то вроде такого: class A { public: _CTOR(A)(int x, int y) {} }; И вот этот макрос должен заменить конструктор на A_init(int x, int y)

Alex Фэils?︙
28.06.2016
15:05:59
А почему не пашет предложенный метод?

тьфу, то, что есть

Mr.
28.06.2016
15:06:51
Error (active) explicit type is missing ('int' assumed)

Google
Плюшка
28.06.2016
15:07:09
там тип же надо указать в объявлении ф-ции

Mr.
28.06.2016
15:07:22
точно

сейчас попробую

Плюшка
28.06.2016
15:07:57
(либо в макросе, либо перед его вызовом)

Mr.
28.06.2016
15:08:20
спасибо

Alex Фэils?︙
28.06.2016
15:08:23
Покажи)

Mr.
28.06.2016
15:08:46
#ifdef C_CODE #define _CTOR(NAME) void NAME##_init #endif

Alex Фэils?︙
28.06.2016
15:09:05
Точно

Mr.
28.06.2016
15:13:25
если кому интересно, вот конечная версия: #ifdef C_CODE #define _CTOR(NAME) void NAME##_init #define _CTOR_CALL(TYPE, NAME) TYPE NAME; NAME.TYPE##_init #endif #ifdef CPP_CODE #define _CTOR(NAME) NAME #define _CTOR_CALL(TYPE, NAME) TYPE NAME #endif

тащем-то если добавить замену класса на структуру, то можно наебать систему и использовать классы в си коде

правда они кастрированные будут

Kirill
28.06.2016
15:23:17
только в сишном коде в структуре напрямую функцию не обьявить

только указатель

Google
Georgy
28.06.2016
15:33:04
Очередной раз натыкаюсь на метапрограммирование в C++, очередной раз тревожит вопрос.. Кроме генерирования констант и вещей связанных с шифрованием и вынесением из бинарника способа вычисления, где то в реальности применяется метапрограммирование на плюсах? Крайне притягательно выглядит элегантность многих решений, но я не вижу пока каких либо преимуществ перед стандартными подходами. Очень красиво делать наследование от списка типов рекурсивно и прочее, но кажется что примеры надуманные. Вопрос еще раз - кто нибудь применяет на практике - в каком контексте ?

Kirill
28.06.2016
15:35:47
я на этапе компиляции получаю все параметры для класса. например (конкретно про микроконтроллеры) есть херова гора пинов к которым присоеденяется микросхема, под каждую плату эти пины разные (припаянно по разному), но во время выполнения программы никто никогда перепаивать ничего не будет

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

Georgy
28.06.2016
15:37:11
Конфигурация распиновок лежит отдельно?

Интересно, спасибо

Kirill
28.06.2016
15:38:17
сами пины это гора шаблонных параметров, сама конфигурация распиновок это структура по факту ничего не имеющая, но внутри нее находятся тайпдефы. щас я скину пример

http://pastebin.com/GQy2izC7 вот инициализация херовой горы пинов в микросхеме

это конкретно класс отвечающий за микросхему ksz8051

gpio это шаблонный класс он тут https://github.com/ThatEmbeddedGuy/Stm32-Template-Gpio-Library/blob/master/Gpio.h

но это опять же микроконтрллеры, там специфичная работа с регистрами

и прямая работа с железом

в итоге инициализация микросхемы с поднятием стека tcp ip внутри контроллера выглядит так

typedef ksz8051Pins< PortA,2, //Mdio PortC,1, //Mdic PortC,4, //Rxd0 PortC,5, //Rxd1 PortB,0, //Rxd2 PortB,1, //Rxd3 PortA,7, //Rxdv PortA,1, //Rxdclk PortB,10, //Rxerr PortA,4, //Int PortB,12, //Txd0 PortB,13, //Txd1 PortC,2, //Txd2 PortE,2, //Txd3 PortB,11, //Txen PortC,3, //Txclk PortE,3 //Reset > pinlist; ksz8051<pinlist> instance; MacDma macdma(&instance); macdma.Init(); tcpip_init( NULL, NULL );

Georgy
28.06.2016
15:47:58
Сначала подумал что Хренова гора - преувеличение, ан нет) спасибо за use case

Kirill
28.06.2016
15:48:54
http://ww1.microchip.com/downloads/en/DeviceDoc/KSZ8051MNLU_RNLU.pdf

там в конкретно этой микросхеме 32 ноги, их нужно куда то подключать) у каждой ноги микроконтроллера есть еще 5 или 6 параметров (вход это или выход, скорость, подтяжка и.т.п.)

в итоге получаем реально гору данных которые нужно хранить, а потом зачем то передавать в конструктор

в итоге мы передаем их compile time

Georgy
28.06.2016
15:50:25
Выглядит крайне уместно

Спасибо за пример)

Google
Kirill
28.06.2016
15:52:14
незачто)

Georgy
28.06.2016
15:55:40
Интересно что то хитрее, а-ля обращение списка параметров во время компиляции и прочие доступные примеры. Напоминает книгу александреску, в которой подавляющее большинство кода уместно для библиотеки , в то время как в конечном приложении применять - сомнительно

Kirill
28.06.2016
15:56:47
в конечном приложении есть constexpr

Georgy
28.06.2016
15:57:37
Аналогичная позиция )

Serge
28.06.2016
17:33:11
для зума в точке, где курсор мыши расположен, как нужно менять камеру? glViewport (mouseX, mouseY, glutGet(GLUT_INIT_WINDOW_WIDTH), glutGet(GLUT_INIT_WINDOW_HEIGHT)); gluOrtho2D (-glutGet(GLUT_INIT_WINDOW_WIDTH)*zoomFactor, glutGet(GLUT_INIT_WINDOW_WIDTH)*zoomFactor, -glutGet(GLUT_INIT_WINDOW_HEIGHT)*zoomFactor, glutGet(GLUT_INIT_WINDOW_HEIGHT)*zoomFactor);

если так делаю, то зум правильный только в левой верхней части окна

arisu
28.06.2016
17:36:03
зачем

просто умножь на матрицу переноса (0, 0, -1)

или (0, 0, 1)

Serge
28.06.2016
17:38:44
просто не знаю что такое матрица переноса и что на неё умножать

arisu
28.06.2016
17:38:54
а как ты в опенгл попал вообще.

а

arisu
28.06.2016
17:39:10
тебе в точку мыши надо

задачка поинтересней, там надо перенос по всем осям

Serge
28.06.2016
17:39:46
если ты про линал то знаю

а что на что в гл умножать нет, но это лирика

а перенос и объекта и камеры?

arisu
28.06.2016
17:40:29
матрицы везде.

Serge
28.06.2016
17:42:18
неправильно выразился, endor.

Google
Serge
28.06.2016
17:43:37
перенос делать только всего рисунка glTranslat ом? просто много вариантов решения вроде как, и вьюпортом, и глЛукАутом, и глПерспективойй

arisu
28.06.2016
17:47:26
я хз

попробуй в 2003 поспрашивать

Admin
ERROR: S client not available

Serge
28.06.2016
22:18:29
не срочно

Йобу
29.06.2016
05:59:36
есть тут шарящие в winapi? проблема такая: создаю окно библиотекой glfw, на некоторых этапах я могу позволить пользователю изменить его размеры, но потом размер изменяться не должен. соответственно я ликвидирую ws_sizebox и ws_maximizebox. однако получается такая фигня: если пользователь развернул окно на весь экран (как через sc_maximize, например) можно даблкликнуть по заголовку окна и случится sc_restore и размер окна изменится чего я допустить не могу

заменять wndproc нет возможности т.к. эта функция принадлежит glfw

arisu
29.06.2016
06:15:13
А в глфв разве нельзя отключить это?

Или в колбеке ресайза ресайзить обратно, хотя это костыльно

Йобу
29.06.2016
06:17:21
так через него и делается

А в глфв разве нельзя отключить это?
glfw может только при создании окна такие штуки отключать, потом уже никак.

Alex Фэils?︙
29.06.2016
06:18:11
А еще можно перехватить сооьщение WM_GETMINMAX и в нем возвращать одинаковые минимальные и максимальные размеры окна

Йобу
29.06.2016
06:20:42
у меня другая идея - сделать свою wndproc и перехватывать там нужное событие, а остальное сливать в wndproc от glfw где оно успешно дойдет до defaultwndproc

только можно ли текущий wndproc узнать?

и мне как-то ссыкотно до такой степени потрошить glfw, мне кажется на следующем релизе библиотеки мой билд сдомается

хотя они и дают native access

Google
Alex Фэils?︙
29.06.2016
06:24:11
Sheldon
29.06.2016
15:58:59
какие книги по метапрограммированию почитать, чтобы сорцы буста перестали казаться сложными?

Vasiliy
29.06.2016
16:01:33
черт его знает) Александреску, наверное

Penter
29.06.2016
16:02:18
Кстати

Что такое контрактное программирование?

Vasiliy
29.06.2016
16:03:54
это, вроде, когда у тебя везде пре/пост-кондишны и инварианты

или когда заключаешь контракт на разработку и ишачишь

Vasiliy
29.06.2016
16:06:47
ну в прямом вмысле – описываешь пред/пост условия в ф-циях, как минимум

Vasiliy
29.06.2016
16:07:42
ну на примере c#: https://msdn.microsoft.com/en-us/library/dd264808(v=vs.110).aspx

о, в c++17 есть они (будут) https://isocpp.org/files/papers/D4492.pdf

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