
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
матрицы везде.

Endor
28.06.2016
17:40:43

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

Alex Фэils?︙
28.06.2016
19:25:09

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
А в глфв разве нельзя отключить это?
Или в колбеке ресайза ресайзить обратно, хотя это костыльно

Alex Фэils?︙
29.06.2016
06:17:01
И запретить разворот окна

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

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
это, вроде, когда у тебя везде пре/пост-кондишны и инварианты
или когда заключаешь контракт на разработку и ишачишь

Penter
29.06.2016
16:05:36

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

Penter
29.06.2016
16:07:05
Что за предпостусловия

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