Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
Всем здравствуйте! Дано: Есть найденный в сети и вроде бы работающий класс с двойной перегрузкой квадратной скобки. Т.е. к экземпляру этого класса можно обращаться как двумерному массиву, всё красиво. работающий класс двумерного массива для intarray.h : Код: 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. main.cpp : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. И я пытаюсь сделать этот класс шаблонным, но не получается, не понимаю, что тут не не нравится компилятору (использую mingw + codeblocks под виндой). Было бы интересно сделать универсальный класс двумерного (в перспективе - и более высокой размерности) массива для разных типов данных. собственно, мой некомпилирующийся код array.h : Код: 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. main.cpp : Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ругань компилятораerror: specializing member 'tst_array<QType>::row<QType>::operator[]' requires 'template<>' syntax Подскажите, в чём же тут ошибка и как это можно обойти или исправить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 10:32 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
amigo11, А зачем вам шаблон для вложенного класса? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 10:51 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, мне кажется это нужно, т.к. вложенный класс row, так же как и tst_array должен уметь работать с разными типами данных. Но просто так засунуть QType в row у меня не получилось, пришлось писать template <class PType>. В с++ я пейсатель с опытом в пару месяцев, если честно. Но хотелось бы разобраться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 11:05 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 11:10 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
amigo11, Если решаете практическую задачу то лучше применить vector<vector<int> > или list<vector<int> >, или готовые классы матриц в зависимости от ситуации и требуемых операций и требований к ним, (чтобы самому написать хороший такой класс уйдут годы я думаю). Если хотите сделать вложенный шаблонный класс с независимой специализацией (отличный от внешнего класса тип) то для всех определений функций-членов вложенного класса нужно писать: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Если хотите просто многомерный массив фиксированного размера, можете сделать обертку над vector<T> с какой-нибудь функцией многомерной адресации элементов Код: plaintext 1. 2. 3. 4. 5. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 11:31 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
amigo11, Исходный класс не такой уж и хороший, нет например константного доступа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 11:56 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
amigo11, Начнем с того, что у шаблона должен быть один параметр шаблона, а не два. Вложенный класс строки будет с тем же параметром шаблона, что и внешний. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:01 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
amigo11, Деструктор вряд ли должен быть виртуальным, это заведомо неполиморфный класс. Впрочем, Анатолий вроде бы уже дал вам хороший пример кода, лучше изучить его.з ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:04 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
Анатолий Широков, Наверное для целей лучшего контроля доступа к элементам, например, проверки выхода за границы матрицы, тот вариант со вложенным классом строки более прогрессивен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:10 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
[quot amigo11]Anatoly Moskovsky, мне кажется это нужно, т.к. вложенный класс row, так же как и tst_array должен уметь работать с разными типами данных. В том то и дело, что тип данных у них одинаков. Он может быть любым, но он один и тот же у главного и вложенного классов, более того, если он будет разным, это будет ошибка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:15 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
amigo11, Ещё, для начала в шаблоном коде пиши определения методов in-line, внутри определения класса. Будет проще. А обратное все равно почти никогда не нужно на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 12:20 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
sherzod_, Код: plaintext 1. ну, с твоего позволения поправлю твою функцию вычисления смещения элемента при линейной развертке: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 13:28 |
|
||
|
Проблема с шаблоном вложенных классов + двойная перегрузка []
|
|||
|---|---|---|---|
|
#18+
Анатолий Широковsherzod_, Код: plaintext 1. ну, с твоего позволения поправлю твою функцию вычисления смещения элемента при линейной развертке: Код: plaintext 1. Конечно, виноват, недовспомнил недодумал. Тогда уже если смотреть как на декартову СК фронтально, с глубиной, получается SizeX * SizeY * z + SizeX * y + x :). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.06.2013, 13:50 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38287926&tid=2020160]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 159ms |

| 0 / 0 |
