Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
Написал класс- контейнер для хранения произвольных данных: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Сложил значения: Код: plaintext 1. 2. Теперь не могу получить значение: Код: plaintext 1. Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 09:06 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
Как хранить типы данных, чтобы при получении значений не указывать к какому типа надо приводить полученное значение? + Зная тип каждого элемента в деструкторе можно будет автоматически освободить память без оборачивания элементов unique_ptr. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 09:34 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, union? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 10:30 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
rdb_devAlekseySQL, union? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. У меня много нестандартных типов данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 10:35 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, ну и засунь их все в union! Какая разница? Твой union будет размером с самый большой твой тип. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 10:42 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
Это вообще не компилируется. auto в параметрах нельзя, insert принимает пару. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 10:48 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
a guestЭто вообще не компилируется. auto в параметрах нельзя, insert принимает пару. Насколько я понял стандарт C++14 позволяет не создавать шаблонов, а писать auto (если этого в функции будет достаточно). Написал так: Код: plaintext 1. Все равно ошибка при получении значения остается. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 10:52 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL, auto-параметры могут быть у лямбд. Текст ошибки намекает, что она где-то до строки с bool, а не в шаблоне. Скидывай минимальный полный код, думаешь, людям не лень хедеры прописывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 10:55 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
a guestЭто вообще не компилируется. auto в параметрах нельзя, insert принимает пару.Еще как можно! Справа указываешь конкретный член объединения, слева - auto. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 10:57 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQL Код: plaintext 1. С оператором не получится. Используйте функцию. Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 12:03 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLТеперь не могу получить значение: Код: plaintext 1. Конечно не можешь! Здесь, как минимум, надо было писать: Код: plaintext 1. Ведь ты же должен передавать std::string в перегруженный оператор [] по ссылке, а не по значению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 13:04 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLНаписал класс- контейнер для хранения произвольных данных: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Сложил значения: Код: plaintext 1. 2. Теперь не могу получить значение: Код: plaintext 1. Код: plaintext 1. Я бы сделал так... Описано схематично. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. Сложил значения: Код: plaintext 1. 2. Получил значение: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 13:18 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
rdb_dev[/src]Конечно не можешь! Здесь, как минимум, надо было писать: Код: plaintext 1. Ведь ты же должен передавать std::string в перегруженный оператор [] по ссылке, а не по значению.[/quot] Я пробовал убрать знак ссылки в принимающем операторе [] - ошибка все равно сохраняется. Так что походу Anatoly Moskovsky прав- оператор нельзя сделать шаблонным. Anatoly Moskovsky, спасибо сделал метод at(const std::string&); blonduser, спасибо, но перечисление типов мне не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 13:34 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
a guestЭто вообще не компилируется. auto в параметрах нельзя... У меня в этом месте компилятор gcc съедает, а Intel- овский пишет ошибку :) Код: plaintext Кстати, хорошее нововведение: у входящих данных редко используются статические методы, поэтому auto в таких ситуациях хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 13:45 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
rdb_dev Код: plaintext 1. Ведь ты же должен передавать std::string в перегруженный оператор [] по ссылке, а не по значению. Код: plaintext 1. Это вообще-то сам компилятор делает, когда надо привести к const string&. Стыдно не знать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 13:52 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
[quot AlekseySQL]Написал класс- контейнер для хранения произвольных данных: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Это шаблон функции. Причём, не простой фукнции, а оператора. Шаблон функции инстанциируется либо явно , по указанию явным образом параметров шаблона, либо неявно, при этом параметры шаблона определяются параметрами этой фукнции, указанными при вызове. У тебя ни один из этих способов не может быть использован, т.к. параметры фукнции не являются параметрами шаблона, а явно указать параметры шаблона при вызове функции ты не можешь, поскольку это ещё и оператор. Итого, то, чего ты хочешь, вообще не сделать. Можно было бы указывать параметры шаблона при вызове оператора-фунции по полному имени (я даже не знаю, возможно ли это, но допустим что возможно), но видимо это не то, что ты хочешь, потому что тогда смысла в операторе нет никакого, можно его заменить обычной функцией. Что тебе и рекомендую сделать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 13:55 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
a guestAlekseySQL, auto-параметры могут быть у лямбд. Не только у лямбд. auto может быть где угодно. В объявлении переменной, в шаблонах, в лямбдах... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 13:57 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLЯ пробовал убрать знак ссылки в принимающем операторе [] - ошибка все равно сохраняется. Так что походу Anatoly Moskovsky прав- оператор нельзя сделать шаблонным.Попробуй так: Код: plaintext 1. Возможно, в этом случае нормально отработает дедукция шаблонов, потому как запись вида: Код: plaintext 1. тебя, как я понимаю, тоже не устроит. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 14:01 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЭто вообще-то сам компилятор делает, когда надо привести к const string&.С какого перепугу? O_o Если бы там была передача по значения, я бы еще понял, так как один из конструкторов std::string принимает const char*, а в исходном примере передача не по значению, а по ссылке! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 14:04 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
AlekseySQLa guestЭто вообще не компилируется. auto в параметрах нельзя... У меня в этом месте компилятор gcc съедает, а Intel- овский пишет ошибку :)Надо компилировать с предупреждениями и читать их. Там написано, почему gcc воспринимает auto. Да, совсем забыл, "возвращаемый" шаблонный тип выводить можно для операторов преобразования типа. А больше нельзя. Если надо не указывать явно шаблонный тип, придётся использовать proxy-класс https://wandbox.org/permlink/6H7gvQszvlkzT0Ns Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. Выводит Код: plaintext 1. 2. Что делать с присваиванием — не знаю. Можно добавить шаблонный оператор присваивания в Proxy, наверное. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 15:34 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
MasterZiva guestAlekseySQL, auto-параметры могут быть у лямбд. Не только у лямбд. auto может быть где угодно. В объявлении переменной, в шаблонах, в лямбдах...Главное, что не в параметрах функции. Это нововведение — часть Concepts TS. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 15:36 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
rdb_devAnatoly MoskovskyЭто вообще-то сам компилятор делает, когда надо привести к const string&.С какого перепугу? O_oПрочти http://eel.is/c draft/dcl.init.ref вдумчиво и внимательно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 15:41 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
rdb_devС какого перепугу? O_o Если бы там была передача по значения, я бы еще понял, так как один из конструкторов std::string принимает const char*, а в исходном примере передача не по значению, а по ссылке! А как по-вашему работает вот это? Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2018, 17:10 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovskyrdb_devС какого перепугу? O_o Если бы там была передача по значения, я бы еще понял, так как один из конструкторов std::string принимает const char*, а в исходном примере передача не по значению, а по ссылке! А как по-вашему работает вот это? Код: plaintext 1. 2. 1) Тут присваивание, а не инициализация. 2) Тут тип слева совпадает с типом справа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2018, 22:58 |
|
||
|
Как сделать шаблонным оператор []?
|
|||
|---|---|---|---|
|
#18+
a guest1) Тут присваивание, а не инициализация. 2) Тут тип слева совпадает с типом справа.Ты не понял, у меня по другому поводу диссонанс... Когда мы объявляем std::map<std::string, int> m, то внутри такого map имеем публичный тип typedef std::string key_type, а при вызове m["a"]=1 используется прототип перегруженного оператора mapped_type& operator[](key_type&& __k) и мне совершенно непонятно - каким образом "a" из const char* превращается в ссылку на std::string, проинициализированный значением "a"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2018, 09:43 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39633766&tid=2017874]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
66ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
| others: | 281ms |
| total: | 440ms |

| 0 / 0 |
