
Казимир
22.08.2018
20:36:59
Как вывести переменное кол-во параметров template<typename... T> без рекурсии? (если это конечно вообще возможно)
https://pastebin.com/Wz6Ut6wp

Denis
22.08.2018
20:40:28
можно еще обернуть их в тупл и циклом до размера тупла

Побитый
22.08.2018
20:46:31

Google

Denis
22.08.2018
20:48:21
тогда остановлюсь на первом своем ответе про фолд

Казимир
22.08.2018
20:49:13
лол, точно

Constantine
22.08.2018
20:49:22
а я понял, что туплю
прочитал ссылку)

Казимир
22.08.2018
20:49:40
а стоп

Constantine
22.08.2018
20:49:52
sizeof... это только количество

Побитый
22.08.2018
20:49:54

Surreal
22.08.2018
20:50:10

Denis
22.08.2018
20:50:13

Казимир
22.08.2018
20:50:34

Surreal
22.08.2018
20:50:43
Враппер над нужными типами.

Constantine
22.08.2018
20:50:47
вообще boost::fusion умеет что-то про циклы по туплу

Google

Побитый
22.08.2018
20:52:25
но ведь там данные разных типов?
Не, я про другой трюк. Там используется оператор "запятая", и массив как бы интами инициализируется, попутно выполняя полезную работу. Я щас с телефона, не могу пример написать(

Constantine
22.08.2018
20:53:30
что-то в духе "((void)(cout « x), 0)..." ?

Побитый
22.08.2018
20:53:37
Да

Surreal
22.08.2018
20:55:05
^ это с 17 стандарта.

Constantine
22.08.2018
20:55:48
https://ideone.com/XI4FjP
Да
Точно, забыл совсем про это

Побитый
22.08.2018
20:56:17
Во, именно это имел ввиду)

Constantine
22.08.2018
20:56:28
Я даже пользовался как-то раз, просто забыл)

Казимир
22.08.2018
20:57:16

Constantine
22.08.2018
20:57:40
каждый элемент выглядит как "вывести параметр инпута, записать значение 0 в массив"
понятно стало?)

Казимир
22.08.2018
20:59:39
не очень)
зачем void

Constantine
22.08.2018
20:59:56
чтобы запятой перегруженной не было!

Казимир
22.08.2018
21:00:00
и блин вообще все-таки ничего не понятно)

Constantine
22.08.2018
21:00:25
посмотрите на выражение "(void)(cout << x), 0"

Evgeniy
22.08.2018
21:00:49

Constantine
22.08.2018
21:01:06
неперегруженный оператор запятая вычисляется слева направо и возвращает правое значение
вычисление левой части выведет х

Google

Constantine
22.08.2018
21:01:34
результатом всего оператора будет 0
итого мы написали выражение, которое выводит x в std::cout, а результатом вычисления является 0
остается только инициализировать набором из таких выражений массив

Казимир
22.08.2018
21:03:37
все равно не понимаю зачем тут void

Constantine
22.08.2018
21:03:51
потому что если вам нужна неперегруженная запятая
всегда надо кастить выражение к void

Казимир
22.08.2018
21:04:08
аа
все ок
туплю сорри)

Constantine
22.08.2018
21:26:23
@antoshkka хотите шутку?)
https://godbolt.org/z/6nTmPn

Evgeniy
22.08.2018
21:27:19
'this' cannot be used in a static member function declaration

Constantine
22.08.2018
21:27:43
два компилятора в примере уверены, что можно
:)

Evgeniy
22.08.2018
21:28:06

Constantine
22.08.2018
21:28:27
а стандарт?
ой как не думаю, что стандарт разрешает this в статических функциях

Evgeniy
22.08.2018
21:29:22

Constantine
22.08.2018
21:29:35

Evgeniy
22.08.2018
21:29:46
Note: A static member function does not have a this pointer (9.3.2).
можно ссылочкой?
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3797.pdf страница 221 внизу

Google

Constantine
22.08.2018
21:31:40
как выражение в контексте тела функции?

Konstantin
22.08.2018
22:24:32
парни, привет! У меня тут очень странная дичь.
Есть дефайн в CMakeLists.txt, например, foo.
add_definitions(-DFOO)
так вот, хидер его не видит, а cpp файлы - видят
как это вообще возможно?
разобрался

Alexey
23.08.2018
01:46:01

Igor
23.08.2018
09:10:28
товарищи, а есть какой-то способ повлиять на такое поведение? https://godbolt.org/z/fi43fR
чтобы кусок базового класса инициализировался виртуальной функцией из наследного
или к моим услугам только передача в конструктор нужного значения?

Egor
23.08.2018
09:11:36
вроде не рекомендуется виртуальные функции из конструкторов вызывать

Igor
23.08.2018
09:12:28
угу, даже у Майерса помню было про это
меня тут просто упрекают что мол в шарпах такое прокатывает, вот я и задумался)

Egor
23.08.2018
09:12:42
нижний класс ещё не создался, поэтому вызывать нечего

Spoonson
23.08.2018
09:13:55
ну, технически всегда можно было сделать, что vptr устанавливается не в конструкторе, а до и тогда все вызывалось бы в нужный момент. Но я так понимаю, специально было сделано именно так как сделано
чтоб был меньше шанс отстрелить ногу

Igor
23.08.2018
09:15:01
аргументация, вроде бы, такова, что реализация виртуальной функции из наследника может пользоваться полями самого наследника, а они в этот момент ещё неинициализированы

Spoonson
23.08.2018
09:17:42
https://isocpp.org/wiki/faq/strange-inheritance#calling-virtuals-from-ctors там дальше даже воркараунды есть

Борис
23.08.2018
09:22:48
Как в cmake установку хидеров сделать отдельным таргетом? В свой каталог.
Есть add_custom_target. Вот как туда прикурутить команду install.

Stanislav
23.08.2018
09:25:33
если пути в сорцах и пути инстала нужны разные то
target_include_directories(my-library-name INTERFACE
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include/mylib>
$<INSTALL_INTERFACE:include/> # <prefix>/include/
)

Antony
23.08.2018
10:31:34

Google

Stanislav
23.08.2018
10:34:41
надо и в студию репортить, 15.8 тоже это компилирует

Nikita
23.08.2018
11:08:31
Как смержить одну ветку в другую так, чтобы git show <commit> показывал, что изменилось?
(git)