
Igor
10.07.2018
11:01:00
для void func(int (&arr[2])); тоже не сработает, ибо нельзя биндить временное значение в неконстантную ссылку

Ilia
10.07.2018
11:01:23

Igor
10.07.2018
11:01:24
а так std::vector или std::array в помощь

Alex
10.07.2018
11:01:50
Коллеги, такой вопрос имеется - пилится библиотека, в этой библиотеке для некоторых функций есть как обычная, так и платформозависимая реализации (на куче интринсиков), собственно вопрос - как бы это элегантно всё организовать?
Пока склоняюсь к решению основанному на policy, как описано в ответе https://stackoverflow.com/questions/7548975/c-handling-specific-impl-ifdef-vs-private-inheritance-vs-tag-dispatch/7604607
Есть ещё варианты? Кто-нибудь делал что-то подобное?

Google

Ilia
10.07.2018
11:02:20

Alex
10.07.2018
11:03:26
сколняюсь к тому, что нет

Grigor
10.07.2018
11:03:28

Ilia
10.07.2018
11:04:16
Какую фабрику?

Grigor
10.07.2018
11:05:28

Valeriy
10.07.2018
11:05:39

Alex
10.07.2018
11:06:42
ну ifdef не хочу из соображений того, чтобы попроще расширяемость была (не хочу новый ifdef при выходе очередного AVX-9000)

Юра Незнанов
10.07.2018
11:07:00
а там еще задачи прибавятся или это уже их финальное количество?

Alex
10.07.2018
11:07:01
в куче кода

Arseny
10.07.2018
11:07:19

Alex
10.07.2018
11:08:05

Google

Grigor
10.07.2018
11:09:01

Dmitry
10.07.2018
11:11:10

Ilia
10.07.2018
11:12:51

Alex
10.07.2018
11:13:28

Ilia
10.07.2018
11:13:38

Alex
10.07.2018
11:14:01

Ilia
10.07.2018
11:14:18
Крипто хрень...
Что нужно - не понятно...

Alex
10.07.2018
11:14:46
ладно, если ifdef в одном месте,, но не в сотне же
да

Ilia
10.07.2018
11:15:35
да
У тебя на одной платформе сколько реализаций данной функции будет?

Dmitry
10.07.2018
11:16:28

Alex
10.07.2018
11:18:11
должна быть одна, если пользователь либы не дурак и будет пользовать её там где собрал, на случай если это не так, я бы оставил ему реализацию по-умолчанию

Dmitry
10.07.2018
11:18:26

Alex
10.07.2018
11:20:07
с этой точки зрения мне подход на шаблонах больше нравится - тк компилятор ругнется, если я забыл специальзировать новый шаблон
(не новый шаблон, а новую специализацию сделать, ну ты понел)

Ilia
10.07.2018
11:22:20

Alex
10.07.2018
11:25:13
ну в решении с policy напишет, что-то вроде typedef policy_list<avx512_policy> active policy;
active_policy

Google

Dmitry
10.07.2018
11:26:34

Alex
10.07.2018
11:27:50
ну как вариант, меня это пока не сльно волнует, хочу для начала понять, как это у себя раскидать всё

Dmitry
10.07.2018
11:29:33
Ну или такие вот штуки:
https://github.com/tunabrain/tungsten/blob/master/cmake/OptimizeForArchitecture.cmake

Alex
10.07.2018
11:34:47
спасибо, нормальная тема
кстати в самом коде есть той либы есть куча примеров, чего именно я не хочу
https://github.com/tunabrain/tungsten/blob/62fdbba1a4549fb93e286dd22fbd58fa795a5bbc/src/thirdparty/embree/kernels/geometry/filter.h
например

☭
10.07.2018
11:38:09

Alexander
10.07.2018
11:48:04
Хм, не знал про такое - https://gcc.gnu.org/wiki/FunctionMultiVersioning

Aleksey
10.07.2018
12:20:17

Alexey
10.07.2018
12:57:16

Aleksey
10.07.2018
13:05:12

Thorn
10.07.2018
13:33:54
почему у std::min, std::max оба аргумента одного типа? в результате std::max(const int, volatile int) нельзя без каста

Ignat
10.07.2018
13:36:54
иначе можно проиграть, сравнив -1 и 0ULL

Thorn
10.07.2018
13:39:12
тернарный оператор как-то может это делать

Ilia
10.07.2018
13:40:54

Ⱪonstantin
10.07.2018
13:41:06

Alexander
10.07.2018
13:41:38

Thorn
10.07.2018
13:41:43

Alexander
10.07.2018
13:41:51
как же я устал патчить код от этого говна

Google

Ilia
10.07.2018
13:42:46

Дмитрий
10.07.2018
13:43:13
Меня одногруппник один раз просил помочь, почему у него дерево отрезков тормозит, а он решил не париться с инклудами.... Долго искал.

Ⱪonstantin
10.07.2018
13:43:14
C99? Ха-ха, я int i; перед for часто вижу

Ilia
10.07.2018
13:43:36
Я тоже. В кошмарных снах...

Alexander
10.07.2018
13:44:59
там, где не отработал плагин - правим ручками

Igor
10.07.2018
13:46:27
а tidy может их на лету подцеплять, или только переконпеляция, только хардкор?

Alexander
10.07.2018
13:57:11

Igor
10.07.2018
14:00:44
что значит на лету?
ну не хотеть пересобирать всю прилогу ради одного плагина, а хотеть
$ sudo apt-get install clang-tidy
$ clang-tidy --plugins-dir /work/tidy-plugins src.cpp
> loaded formatting.so
> loaded odr.so
> loaded microseconds.so
src.cpp:250:24: consider using 'boost::chrono' instead of 'uint64_t'
uint64_t delay = MAX_DELAY - time_spent*1000000ULL
?

Alexander
10.07.2018
14:01:10

Igor
10.07.2018
14:01:22
а лучше даже > loaded formatting.py
всё собираюсь распотрошить питоньи биндинги и синтаксис clang-query, да никак не соберусь

Alexander
10.07.2018
14:01:57
с нужным набором плагинов. а потом плагины уже включать через cli
да, выглядит неудобно. но что ж поделать - плагины то на крестах пишутся

Ignat
10.07.2018
14:03:03
какая связь? что мешает собрать .so отдельно и сделать ей dlopen?

Alexander
10.07.2018
14:05:48
конечно, никто не мешает как ты говоришь
но тогда придётся перекомпилять либу

Dmitry
10.07.2018
14:26:34

Alexander
10.07.2018
14:27:00

Dmitry
10.07.2018
14:28:08
replace max (std::max) ;)

Google

Alexander
10.07.2018
14:29:21