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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.74
darkAngel
Технофашист
211 / 192 / 4
Регистрация: 11.03.2009
Сообщений: 850
#1

Шаблоны - C++

25.04.2011, 23:50. Просмотров 2344. Ответов 23
Метки нет (Все метки)

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

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

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

Цитата Сообщение от Deviaphan Посмотреть сообщение
А посл запусков у тебя что получилось?
Я же там привёл результаты запусков: в первом случае 1, во втором - 2
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1285 / 1219 / 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++ Шаблоны
Шаблоны C++
C++ Шаблоны

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

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

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