Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
Есть массив, двумерный. Например, квадратный. Код: plaintext 1. С помощью функции aShow() можно вывести поэлементно: aShow() - ОК Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Понятно. ... Пытаюсь построить шаблонную функцию tShow1() - аналог aShow(), не работает: tShow1() - не компилируется Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Почитал, поискал. Нашел, создал шаблонную функцию tShow2(), все ОК: tShow2 - OK Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Почему "в шаблоне" одна компилируется, а вторая - нет? Вроде бы нерабочий шаблонный вариант соответствует рабочему не-шаблонному. Поясните, пожалуйста. Код: plaintext 1. 2. Обращение к обеим функциям одинаковое: Код: plaintext 1. 2. 3. ... Что-то нашел про многомерные массивы как аргументы функций, а вот как их использовать при создании шаблонных функций - не нашел, только примеры. Пожалуйста, объясните разницу или дайте ссылку, где почитать. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2018, 03:54 |
|
||
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
gcc и clang компилируют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2018, 05:13 |
|
||
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
Короче, всё сложно с `typeOfItem array1 [order][order]` С аргументом всё просто (P — тип параметра, A — тип аргумента): http://eel.is/c draft/temp.deduct.call#2.1If P is not a reference type: — If A is an array type, the pointer type produced by the array-to-pointer standard conversion is used in place of A for type deduction Т.е. тип аргумента из `int[2][2]` превращается в `int(*)[2]`. А вот что делать с типом параметра — не ясно. Есть 2 открытых DR-а: http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1001 http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_active.html#1322 Вроде решили, что тип параметра преобразуется как сказано в http://eel.is/c draft/dcl.fct#5 (массив превращается в указатель) ещё в шаблоне функции. Но решили не то, чтобы совсем. gcc и clang идут путём преобразования параметра ещё в шаблоне функции и поэтому параметр преобразуется в `typeOfItem array1(*)[order]`, что удачно матчит `int(*)[2]`. MSVC, видимо, оставляет параметр в шаблоне не преобразованным и ожидаемо не может вывести из `int(*)[2]` тип `typeOfItem [order][order]` ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2018, 05:43 |
|
||
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
a guestMSVC, видимо, оставляет параметр в шаблоне не преобразованнымЧто, конечно, ожидаемо, т.к. MSVC не умеет в полноценные шаблоны и относится к ним примерно как к макросам: не пытается толком парсить в момент чтения определения шаблона и различать в нём dependent и не-dependent типы. Соответственно, и преобразовывать типы параметров шаблона функции не умеет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2018, 06:01 |
|
||
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
a guest, Т.е., особенности реализации компиляторов, в итоге используется вариант, работающий "и там и тут". Спасибо за ссылки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2018, 14:59 |
|
||
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
a guestотносится к ним примерно как к макросам: не пытается толком парсить в момент чтения определения шаблона и различать в нём dependent и не-dependent типы. Не парсить -- это вполне согласующаяся со стандартом модель поведения. А то, что ADL VC долго не умела, и только вроде бы совсем недавно в 2017-ой кое как запилили -- давно известно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 13:08 |
|
||
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
MasterZivНе парсить -- это вполне согласующаяся со стандартом модель поведения.Нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.05.2018, 20:15 |
|
||
|
Многомерные массивы в качестве параметров шаблонной функции
|
|||
|---|---|---|---|
|
#18+
a guestMasterZivНе парсить -- это вполне согласующаяся со стандартом модель поведения.Нет. Ну, давай докажи, со ссылками на ISO... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.05.2018, 15:32 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=39653398&tid=2017845]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 13ms |
| total: | 161ms |

| 0 / 0 |
