Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток. С C++ раньше дела имел очень мало, а шаблоны только изучаю. Вот какая проблема возникла. Имеется шаблон класса XColumn<typename type> - некий контейнер для type. В нём имеется метод toString(), что-то возвращающий. Код: plaintext 1. 2. 3. 4. 5. 6. Имеется шаблон для другого класса - Int<int size> - что-то вроде вектора фиксированного размера. Код: plaintext 1. 2. 3. 4. Хочется поместить этот вектор в контейнер. Получается. Код: plaintext 1. Но проблема в том, что стандартный шаблонный метод toString() для вектора не подходит, нужна специализация. Пишу: Код: plaintext 1. 2. И вот тут компилятор (g++ 4.4.0) выдаёт ошибку: Invalid use of incomplete type 'class XColumn<Int<N> > Смутно догадываюсь почему, но нет никаких идей как исправить. Возможно ли это вообще? Полный код: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 19:22 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Шаблоны тут не нужны, наследования хватит за глаза. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 19:31 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Serg_77m, для начала ты не то параметризируешь.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 19:41 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovШаблоны тут не нужны, наследования хватит за глаза. Это упрощённый тестовый пример. На самом деле XColumn наследуется от абстрактного класса, содержит десяток виртуальных методов и в качестве контейнера использует около десятка разных типов. И почти все методы ко всем типам подходят. Кроме шаблонного Int<N>, для которого пара методов нужна другая. Практически задача решается клонированием шаблона XColumn<typename T> в шаблон XColumnInt<int N> и дублированием всех методов с модификацией нужных. Их не так-то и много. Интерес скорее академический: что не так и как ещё можно решить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 19:54 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Serg_77m, Перед определением метода специализированного класса вам надо написать определение самой этой специализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 22:27 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Т.е. вы не можете специализировать только один метод - надо специализировать весь класс. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.03.2015, 22:28 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyТ.е. вы не можете специализировать только один метод - надо специализировать весь класс.Хм... а специализацию toString() для double проглатывает... Или это нарушение стандарта? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 09:20 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Serg_77mAnatoly MoskovskyТ.е. вы не можете специализировать только один метод - надо специализировать весь класс.Хм... а специализацию toString() для double проглатывает... Или это нарушение стандарта? Я не совсем точно выразился. Нельзя частично специализировать метод/функцию. Полностью специализировать можно. Полная специализация - это когда нет параметров: Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 10:03 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Хотя некоторые компиляторы позволяют частичную специализацию функций, но gcc обычно строг )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 10:04 |
|
||
|
Не компилируется специализация шаблона
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskySerg_77mпропущено... Хм... а специализацию toString() для double проглатывает... Или это нарушение стандарта? Нельзя частично специализировать метод/функцию. Полностью специализировать можно. Полная специализация - это когда нет параметров: Код: plaintext 1. Ага, понятно. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2015, 17:30 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=49&tid=2019042]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
2ms |
| others: | 13ms |
| total: | 148ms |

| 0 / 0 |
