382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
||||||
1 | ||||||
Lambda init capture by const reference20.03.2016, 21:30. Показов 2318. Ответов 9
Метки нет Все метки)
(
Всем привет.
Почему не получается добиться следующего поведения:
Благодарю всех неравнодушных!
0
|
|
20.03.2016, 21:30 | |
Ответы с готовыми решениями:
9
Variadic template lambda capture Lambda Capture — extending object's lifetime
No init for const! |
2549 / 1208 / 358
Регистрация: 30.11.2013
Сообщений: 3,826
|
||||||
20.03.2016, 22:00 | 2 | |||||
Это проблема в том, что С++ как баран разрешает в константных методов присваивать значения ссылкам. Как бы битовое состояние объекта не меняется - а на деле. Думаю тут надо класс wrapper для ival с сеттером и геттером соответствующего const состояния
1
|
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
20.03.2016, 22:05 [ТС] | 3 |
rikimaru2013, std::cref?
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||||||||||
20.03.2016, 22:06 | 4 | ||||||||||
Теоретически:
0
|
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
20.03.2016, 22:13 [ТС] | 5 |
А зачем явно кастить ?
Добавлено через 3 минуты Вобщем через reference_wrapper получается добиться нужного эффекта и писанины не очень много, но все равно как-то костыльно. Но плюсовики — народ привыкший к такому ![]() Кстати, as_const — вообще что-то адовое, по-моему. Писать вызов функции (концептуально), чтобы привести к константному виду ![]()
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
20.03.2016, 22:18 | 6 |
Можно не кастить.
1) Просто для иллюстрации, что именно это делает as_const. 2) Когда я узнаю, что в гцц все пофиксили, будет проще найти такие места и поменять.
0
|
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
20.03.2016, 22:24 [ТС] | 7 |
Тут вам скорее всего
std::experimental:: propagate_const поможет. Еще одна crutch-feature ![]() А из-за чего вообще реджектится такой код на данный момент? Почему запрещена cv-конверсия ссылок?
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
20.03.2016, 22:29 | 8 |
Почему же? Писать меньше и не надо знать сам тип объекта. Да и сам каст выглядит уродливо.
Ты в смысле, почему гцц отвергает теоретически правильный код? Ну так просто баг в гцц.
1
|
382 / 280 / 31
Регистрация: 04.09.2009
Сообщений: 1,225
|
|
21.03.2016, 01:03 [ТС] | 9 |
Ну уродливые касты для того и введены были в С++, чтобы их можно было легче заметить, в отличие от C-style приведений (да, они более restrictive, но сейчас не об этом), а
std::as_const получается более короткая запись [static|const]_cast . Что же это за отказ от заповедей С++?
0
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
21.03.2016, 02:39 | 10 |
Где отказ? У as_const нет ни одного недостатка, присущего сишным кастам. as_const:
1) Легок для понимания. 2) Нормально отыскивается как глазами, так и грепом. 3) И самое главное, безопасен, поэтому не нуждается в искусственной уродливости.
1
|
21.03.2016, 02:39 | |
Помогаю со студенческими работами здесь
10
Rvalue reference and lambda
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |