
Surreal
19.06.2018
21:31:08
Э, везде. Самый очевидный пример f(int w, int h).

Stolyarchuk
19.06.2018
21:38:24

Alexey
19.06.2018
21:39:41
хм. а вот может кто-то подскажет на тему такого небольшого метапрограммирования (c++11, если что):
в классе нужно создать виртуальную функцию и статическую функцию, из статической функции звать виртуальную (не забыв объект конечно):
struct Foo {
static Foo* impl;
virtual barImpl(int a) = 0;
static void bar(int a) {impl->barImpl(a);}
};
Хочется это дело автогенерировать на этапе компиляции, псевдокод:
struct Foo {
static Foo* impl;
METAMAGIC(void bar(int a));
};
Есть идеи как такое (или похожее) сделать?

Spoonson
19.06.2018
21:40:58
а откуда обьект в статической функции возьмется?

Google

Dmitry
19.06.2018
21:41:18
Эх, вот опасная штука сравнение chrono duration с разным разрешением. Не сразу воткнул почему time_point в микросекундах может превышать time_point max... в секундах.

Alexey
19.06.2018
21:42:09

Assasin
19.06.2018
21:42:12

Dmitry
19.06.2018
21:43:07
Не, там оно к общему типу кастуется. Ну и max при переводе в микросекунды переполняется.

Assasin
19.06.2018
21:43:23
ну я об этом же
time_point в секундах превышает max в микросекундах

Dmitry
19.06.2018
21:49:36
Нет, в этом случае всё было бы нормально, т.к. ограниченный time_point без проблем преобразовался бы в микросекунды. А так max скастовался в микросекунды и переполнился.

Stolyarchuk
19.06.2018
21:51:42
Ага, foo статичная
Юз кейс можно?

Assasin
19.06.2018
21:52:34

Побитый
19.06.2018
21:53:20

Google

Alexey
19.06.2018
21:56:11

Побитый
19.06.2018
21:58:32
Ток это походу не метафункция будет, а скорее генератор кода какой-то)

Spoonson
19.06.2018
21:58:36
макрос можно сделать как в gtest типа MAGIC(foo, void(int))

Alexey
19.06.2018
21:58:55
Юз кейс можно?
можно. есть некая пачка функций сидящий в неймспейсе. их зовут сейчас так:
Foo::bar(something);
нужно не ломая обратной совместимости (на уровне исходников, не бинарей) сделать разную реализацию (выбираемую где-то) для этих функций. то есть меняем сразу все функции на другие реализации в рантайме.
в принципе можно наколхозить и руками, но поскольку новые функции (bar + barImpl) добавляются, вот прямо к бабке на ходи, при очередном копипасте кто-нибудь точно забудет что-нибудь поправить и будет зваться совсем не то, что нужно.

Spoonson
19.06.2018
22:02:58

Alexey
19.06.2018
22:04:36
а какой макрос там максимально похож на нужное?
ага, кажется MOCK_METHOD1 ... MOCK_METHOD100500

Stolyarchuk
19.06.2018
22:09:46
или весь код лопатить тогда придётся?

Alexey
19.06.2018
22:10:32
весь код, кажется. 100500 мест где вот так вот напрямую зовут.

Stolyarchuk
19.06.2018
22:11:51
просто я запутался.. вы сначала написали про компиляцию, а потом про рантайм..
тогда ломать неймспейс
ИМХО, не претендующее на правду

Alexey
19.06.2018
22:14:03
О! в с++11 же вариадик макросы есть!
/me вылез из криокамеры

Побитый
19.06.2018
22:15:30
А, макросы
Я недочитал)

Alexey
19.06.2018
22:16:00
именно. не шаблоны, а макросы!

Google

Alexey
19.06.2018
22:16:11
про шаблоны то я знаю.

Stolyarchuk
19.06.2018
22:20:26

Alexey
19.06.2018
22:21:11
а что со struct не так? оно ж как было алиасом для class, так и осталось, не? ?

Vhäldemar
19.06.2018
22:24:05
нууу

Spoonson
19.06.2018
22:24:07

Vhäldemar
19.06.2018
22:24:25
не стоит вскрывать эту тему

Alexey
19.06.2018
22:24:30
В Си они стандартны тоже недавно стали - в С99

Spoonson
19.06.2018
22:26:14
всего-то лет 20 назад ?

Alexey
19.06.2018
22:26:56
но это в Си, не в С++ ? В плюсах -- совсем недавно.

Spoonson
19.06.2018
22:30:13
да, наверное так и есть. Однако это настолько распространенное расширение, и Си (почти?) всегда компилируется плюсовым компилером, что я думаю можно твердо считать, что они наверняка поддерживаются даже не С++11 компилятором

Stolyarchuk
19.06.2018
22:30:53

Stolyarchuk
19.06.2018
22:31:09
Всё таки слегка по разному кодится

Alexey
19.06.2018
22:31:38
ну, тут от крестов то.. си с классами по интерфейсу. причем классы очень минорно присутствуют

Stolyarchuk
19.06.2018
22:32:22
Вы вряд-ли работаете в крестах напрямую с памятью
А в Си это в порядке вещей

Alexey
19.06.2018
22:36:03
от задачи зависит. иногда таки да, иногда таки нет.
иногда mmap в руки и пошел с дивайсом работать. впрочем, это уже флуд.

Stolyarchuk
19.06.2018
22:37:35
тсс) CPP тут)

Alexey
19.06.2018
22:37:42
онтопик: я кажется понял как gmock работает. в общих чертах. надо будет подумать в ту сторону. может реально поможет.

Google

Alexey
19.06.2018
22:38:18
tcc - довольно шустрый компилятор сей ?

Stolyarchuk
19.06.2018
22:46:23
на что я отвечаю, ничем)
потом оказывается лямбдочки и прочее.. без которых уже жизнь жизнью не кажется..

Alexey
19.06.2018
22:48:08
?

Admin
ERROR: S client not available

Alexey
19.06.2018
22:49:44
на собеседовании я прошу реализовать strdup. частенько этого оказывается достаточно.

Stolyarchuk
19.06.2018
22:51:03
Дуров тоде на Си кодит(
приходится оборачивать для нас, тупоговолых крестоб**дей)

Surreal
19.06.2018
22:51:33

Stolyarchuk
19.06.2018
22:52:17

Alexey
19.06.2018
22:54:10
если бы не было 03, то C++11 случился бы на несколько годиков раньше (стандарт нужно актуализировать каждые 10 чтоли лет, иначе он протухает и формально перестает действовать)
дас. печально без boost::function_traits. придется велосипедить.

Stolyarchuk
19.06.2018
23:00:41
это явно не мой уровень.. но разве это не оно? только на стандартной либе https://functionalcpp.wordpress.com/2013/08/05/function-traits/

Alexey
19.06.2018
23:03:10
кажется это как раз и есть велосипед ?
но да, можно угнать чужой велосипед вместо того, чтобы свой делать
спасибо

Vyacheslav
20.06.2018
00:34:23
На constexpr'ах сейчас реально сконкатенировать пару строк и потом посчитать crc32 по получившейся строке? Желательно без использования рекурсии.

Alexey
20.06.2018
00:35:19
а чем рекурсия в compile time плоха?

Vyacheslav
20.06.2018
00:36:00
Сложностью понимания, что происходит.

Google

Vyacheslav
20.06.2018
00:36:36
Вроде бы for'ы в constexpr'ах разрешали. Или ещё нет?

Alexey
20.06.2018
00:36:43
но вообще, for loops разрешены как минимум в c++17
и даже в c++14

Vyacheslav
20.06.2018
00:42:43
Т.е. вот такая магия была нужна только для C++11 ?
https://gist.github.com/slavanap/6144f7985d2fd4d6fc1d5c824eb8a608
Вызывалось так: __getshortfn(__FILE__)

Alexey
20.06.2018
01:07:31
ну, теперь можно как-то так не приходя в сознание наговнокодить:
https://gist.github.com/valexey/99801fa959c570e4c235be423ccfbfe6
static из сигнатуры можно выпилить

yuri
20.06.2018
01:58:31

Konstantin
20.06.2018
02:44:21
@zamazan4ik выложили видео со swampup и corehard

Anatoly
20.06.2018
04:50:12

Oleg
20.06.2018
06:02:14
Парни, есть 2 потока. Если я из второго потока вызываю синглтон из первого потока и какой-нибудь в нем метод, то мне надо синхронизацию делать в этом методе?
И вообще - что почитать про многопоточности, чтобы все понять?

Denis
20.06.2018
06:02:39

Oleg
20.06.2018
06:03:06
Параллельное программирование на С++ в действии. Практика разработки многопоточных программ ??
эту?

Denis
20.06.2018
06:03:49
да, эту