Форум программистов, компьютерный форум CyberForum.ru

Шаблоны - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
darkAngel
Технофашист
206 / 187 / 3
Регистрация: 11.03.2009
Сообщений: 829
25.04.2011, 23:50     Шаблоны #1
Пусть есть шаблон-структура.
C++
1
2
3
4
template <class Data> struct A
{
   Data p;
};
И есть указатели на объекты:
C++
1
2
A<int> *b;
A<float> *c;
Можно ли как-то завести общий указатель для них? т.е. чтоб этот указатель мог указывать и на A<int> и на A<float>?

Пробовал завести родителя (пусть parA) для struct A и создавал указатель этого типа и делал так:
C++
1
2
A<int> *b;
parA * w = b;
Максимум что получилось, это вызвать конструктор через этот указатель:
C++
1
w = new A<int>;
Доступа же к полям не получил. Пробовал явно преобразовывать тип:
C++
1
(A * w).A;
Вылазеет ошибка E2102 Cannot use template 'A<Data>' without specifying specialization parameters
Пробовал сделать родительский класс parA виртуальным и далее через виртуальные методы. Компилятор проглатывает, но ошибка уже на этапе выполнения (ошибка доступа к памяти).

Как быть?


p.s. нужно реализовать стек, элементы которого имеют поля разного типа, а union не охота использовать.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.04.2011, 23:50     Шаблоны
Посмотрите здесь:

шаблоны C++
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». C++
Шаблоны в C++ C++
Шаблоны C++
Шаблоны C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 16:16     Шаблоны #21
Цитата Сообщение от Evg Посмотреть сообщение
Вот я и засомневался, является ли это корректным
Без полного ребилда, наверное некорректно. Ноя только про MSVC, gcc может по другому работает. Вообще, интересный вопрос. А посл запусков у тебя что получилось?

Цитата Сообщение от Evg Посмотреть сообщение
LTCG - это метод для извращенцев, которые пытаются проблемы проектирования переложить на компилятор.
LTCG это не только PGO.)
Кстати, размер тоже на несколько процентов уменьшается. В больших проектах это мегабайты целые.)
Для меня в LTCG только один минус есть: слишком большой размер lib файлов. По сети неинтересно их передавать.)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
27.04.2011, 16:28     Шаблоны #22
Цитата Сообщение от Deviaphan Посмотреть сообщение
Без полного ребилда, наверное некорректно.
Всё то, что написано в стандарте, должно одинаково работать независимо от того, как ты его компиляешь.

Цитата Сообщение от Deviaphan Посмотреть сообщение
Ноя только про MSVC, gcc может по другому работает
Они должны работать в соответсвии с тем, что в стандарте сказано. У меня стандарта Си++ нету, вот думаю, может кто в вопросе разбирается - посмотрит

Цитата Сообщение от Deviaphan Посмотреть сообщение
А посл запусков у тебя что получилось?
Я же там привёл результаты запусков: в первом случае 1, во втором - 2
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
27.04.2011, 16:57     Шаблоны #23
Цитата Сообщение от Evg Посмотреть сообщение
Я же там привёл результаты запусков
Сорри, я не догадался, что это они.)))

Про ребилд я почему заговорил. Перекомпилируются только изменившиеся файлы. Если в одном модуле используется шаблон из хэдэра, а в другой добавили специализацию, то первый модуль может не пересобираться. Т.к. в нём ничего не менялось. И, получается, что в одном модуле оказывается "общая" версия, а во втором специализированная.
В общем, я сомневаться сейчас начал.) Надо пример посложнее написать, чтобы не дин вызов был, а в разных модулях. В стандарте копаться не возбуждает что-то. Лучше тестовый пример написать.)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.04.2011, 17:25     Шаблоны
Еще ссылки по теме:

C++ Шаблоны
C++ Шаблоны в C++
Шаблоны C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,132
Записей в блоге: 26
27.04.2011, 17:25     Шаблоны #24
Цитата Сообщение от Deviaphan Посмотреть сообщение
Если в одном модуле используется шаблон из хэдэра, а в другой добавили специализацию, то первый модуль может не пересобираться
А это пофигу. Шаблонная функция реализуется как WEAK, а специализация - как GLOBAL. Если ты пересоберёшь t1.cc, то всё равно на линковке подцепится специализация из t2.cc. По крайней мере постфакум это так, но я незнаю, что там де-юре
Yandex
Объявления
27.04.2011, 17:25     Шаблоны
Ответ Создать тему
Опции темы

Текущее время: 10:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru