Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Есть несколько структур в которых объявлены поля char[??] name различной размерности. Есть шаблон, который принимает указатель на данные Код: plaintext 1. 2. Подскажите как инстанцировать ее или как должно выглядеть определение перегруженной функции что бы использовалась именно она для всех полей не смотря на размерность, а то для каждой размерности создается свой экземпляр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 15:31 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
КривойЕсть несколько структур в которых объявлены поля char[??] name различной размерности. Есть шаблон, который принимает указатель на данные Код: plaintext 1. 2. Подскажите как инстанцировать ее Код: plaintext 1. 2. Кривойили как должно выглядеть определение перегруженной функции что бы использовалась именно она для всех полей не смотря на размерность, а то для каждой размерности создается свой экземпляр. На размерность чего ? В общем, переводи на русский. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 15:41 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
КривойПодскажите как инстанцировать ее или как должно выглядеть определение перегруженной функции что бы использовалась именно она для всех полей не смотря на размерность, а то для каждой размерности создается свой экземпляр. На самом деле ничего не нужно специально инстанцировать. Никаких отдельных экземпляров не создается для данного кода (при условии что все массивы с одним и тем же типом элементов, например char). Вероятно под экземпляром вы понимаете нечто, что в С++ имеет иное название. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 16:09 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
MasterZiv Код: plaintext 1. Не совсем так, тут Т - необъявлен :) Вот так явно инстанцируется: Код: plaintext 1. 2. 3. Но это ему не надо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 16:14 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Про разные экземпляры. Так как шаблон может инстанцироваться в разных единицах трансляции, то потенциально в каждой из них может быть создана копия кода. Но это зависит не от объявления шаблона, или типа аргумента, а от того как реализована генерация кода в компиляторе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 16:17 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Пусть ужо сам что-то скажет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 17:39 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Разные значит, что ни один из предложенных вами вариантов не подхватывается и если смотреть в отладчике то при разной размерности массива создаются разные функции типа: Код: plaintext 1. 2. 3. Пишу не совсем точно, так как сейчас под рукой нет отладчика, как будет возможность напишу полностью что там выходит. Проблема в том, что передается всегда указатель, а не просто поле: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. Если бы передавался просто параметр, а не указатель проблемы бы не было, предложенными вами способами она бы решалась. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 17:39 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Кривой, Вы шо не могли сразу сказать что передаете указатель на массив? Как по вашему мы должны были догадаться что вы извращаетесь? В этом случае естественно каждый размер массива инстанцирует отдельную функцию, потому что размер массива - часть типа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:43 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, Точнее, он инстанциирует функции для типов "ссылка на массив определённого размера". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:49 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
MasterZivТочнее, он инстанциирует функции для типов "ссылка на массив определённого размера". Какая ссылка? Там взятие адреса & ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:50 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Кривой, Делайте так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Второй шаблон размножится, но из себя вызовет единственный экземпляр первого. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:52 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
ПРоблему наверное можно решить, применив частичную специализацию, и точно можно решить, просто определив нешаблонную функцию, принимающую char*. В случае наличия нешаблонной функции подходящей компилятор будет обязан использовать её, а не шаблонную. Также можно было бы явно инстанциировать функции в месте вызова, явно указывая тип шаблонного парамерта (char*), но это надо верояно много кода менять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:53 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
А вообще непонятно, что вас не устраивает в том что есть несколько экземпляров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:54 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyMasterZivТочнее, он инстанциирует функции для типов "ссылка на массив определённого размера". Какая ссылка? Там взятие адреса & А кстати да. Ну и зря он адрес берёт... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:54 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
MasterZiv, Еще раз говорю - там в функцию передается указатель на массив, а не ссылка, которая неявно умеет преобразовываться в указатель на данные . Поэтому без обертки преобразующей указатель в ссылку не обойтись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.08.2013, 20:56 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Инстанцировать не получается, так как там именно указатель на массив определенного размера. Суть задачи заключается в облегчении привязки, причем на этапе компиляции. template <typename T> void foo(char *ret, void *val); каждый вариант такой функции инстанцируется, для нужных мне типов: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. для автоматического заполнения указателя на функцию используется след. связка: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Макрос используется, что бы можно было оперировать только структурой и ее полем, через указатель на поле сделано так как от нулевого указателя значение невозможно получить. Вообще Fill в реальности конструктор. Все конечно криво, но я не нашел вариант лучше. Если у кого есть варианты буду очень признателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 09:53 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
В нескольких экземплярах не устраивает то, что я не могу инстанцировать одну функцию для всех массивов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 09:55 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКривой, Делайте так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Второй шаблон размножится, но из себя вызовет единственный экземпляр первого. Что-то у меня жесткий тупняк с утра. Все мои примеры кода неверные и содержат кучу опечаток. А вот этот пример я опробую. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 09:59 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Вот исправленные примеры: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. А по предложенному варианту Anatoly Moskovsky, меняю Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. и даже скомпилить не получается выводит сообщение: error C2440: 'initializing' : cannot convert from 'bool (__cdecl *)(char *, void *)' to 'creator' Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 10:19 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Кривой, Приведи весь код дословно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 11:25 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Вот код который есть сейчас. Для всех полей-массивов приходится вместо использования макроса делать отдельную инициализацию. Здесь убраны другие перегрузки, их больше. Код: 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. По хорошему отказался бы и от макроса, оставив только шаблоны, но идей нет никаких. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 11:34 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Кривой, Ошибка -то где происходит и какая? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 11:42 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Вот код на который я исправил попытавшись применить совет Anatoly Moskovsky Код: 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. Ошибка: error C2440: 'initializing' : cannot convert from 'bool (__cdecl *)(void *, void *, char *)' to 'creator' Ошибка в шаблонном конструкторе VS2005. Выделил места которые менял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 11:59 |
|
||
|
Шаблон и char[]
|
|||
|---|---|---|---|
|
#18+
Кривой, Что по вашему должно означать вот это выражение? Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2013, 12:46 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38360200&tid=2020050]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 295ms |
| total: | 457ms |

| 0 / 0 |
