![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| zss |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
есть шаблонный класс
я хочу наследоваться от него и просто инициализировать map_; например *.h
и тогда *.cpp
но 1. Говорит, что нельзя инициализировать статические члены через производный класс 2. каждый шаблон будет инстанцирован со своим статическим map_? например
3.и как будет дело обстоять с однотипными шаблонами (тоесть инстанцированные одним типом) например
|
||||||||||
|
|||||||||||
| slava72 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 23.6.2006 Репутация: 1 Всего: 1 |
т.к. map_ принадлежит Parser<ENUM> то и инициализировать нужно Parser<ENUM>::map_
соответствено, все классы порожденные от Parser<ENUM> будут разделять 1 и тот же map_, а Parser<ENUM1>::map_ и Parser<ENUM2>::map_ - различны |
|||
|
||||
| zss |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
спасибо - понятно (главное что для разных ENUM разные map_)
пробовал
таже фигня Это сообщение отредактировал(а) zss - 3.7.2006, 11:25 |
||||||
|
|||||||
| slava72 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 23.6.2006 Репутация: 1 Всего: 1 |
а так ?
вообще то для подобных конструкций предпочитаю пользоватся typedef-ом )) Это сообщение отредактировал(а) slava72 - 3.7.2006, 12:06 |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
| slava72 |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 23.6.2006 Репутация: 1 Всего: 1 |
Выдержка из draft-a:
Не до конца понятно, но похоже инитить чем хочешь не получится. Обмануть можно чем то вроде:
Что-то типа этого, но не уверен что прокатит (( либо (для сокрытия деталей) в классе Some1 объявляем статическую функцию, возвращающюю map (можно приватню - тогда объявляем InitMap другом), в специализации InitOfMap - вызываем эту статическую функцию. Реализация функции в .cpp Это сообщение отредактировал(а) slava72 - 3.7.2006, 12:57 |
||||
|
|||||
| slava72 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 23.6.2006 Репутация: 1 Всего: 1 |
Еще 1-н вариант (не знаю насколько удобный/удачный) в этой задаче - шаблонс с 2-мя параметрами,
при этом 2-й - указатель на функцию. Хотя не совсем ясен прототип этой функции. Компилера под рукой нет, но что-то подобное:
|
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
slava72, вот так компилится
но я не совсем уверен, что это правильно и еще не линкуется - говорит, что не видно ToString и ToValue |
|||
|
||||
| slava72 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 23.6.2006 Репутация: 1 Всего: 1 |
Если компиоится, то все нормально, по идее номальная специализация.
А ToString и ToValue похоже надо писать самому - это преобразование класса <T> в стороку и обратно. В .cpp:
Это сообщение отредактировал(а) slava72 - 3.7.2006, 15:08 |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
| slava72 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 22 Регистрация: 23.6.2006 Репутация: 1 Всего: 1 |
Если шаблонные функции вызываются, значит их кто-то должен написать ? Можно наложить ограничения на шаблонный параметр, например считать T - классом, имеющим конструктор от строки и преобразование в строку. Или дружественные функции string ToString(const T&) или еще что нибудь. Для этих типов пишешь обобщенную реализацию функций. А для всех не удовлетворяющих - специализированные функции. Опять таки вопрос - кто автор класса Parser - если ты сам, то нужно более детально продумать что и как ты хочешь сделать. А если кто-то другой, то есть что дают ... |
|||
|
||||
| zss |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 708 Регистрация: 17.6.2004 Репутация: 1 Всего: 2 |
||||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |