Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Статические атрибуты в шаблоне |
Автор: gray_k 21.5.2004, 13:38 | ||||
Я пытаюсь создать шаблон класса со статическим элементом:
Затем в другом модуле я пишу:
Никто не сталкивался с подобным? |
Автор: bel_nikita 21.5.2004, 13:50 | ||
А так не пробывал:
|
Автор: gray_k 21.5.2004, 14:04 |
Пробовал, пробовал. Тут дело в том, что статические элементы в С++ не наследуются. У меня здесь вопрос как бы реализовать код так, чтобы можно было для разных классов использовать некоторые одинаковые методы работы со статическими элементами. |
Автор: bel_nikita 21.5.2004, 14:21 |
То gray_k: так может применить виртуальное наследование. Если хочешь, чтоб базовый класс (объект) был для всех один |
Автор: bel_nikita 21.5.2004, 14:32 | ||||
Че та я не понял??? ![]()
Все компилится! |
Автор: gray_k 21.5.2004, 14:37 | ||||||||
Нет немного не то. У меня есть несколько классов. У них элементы и функции - статические. Причем элементы различаются только типом, а так их набор одинаков. И для всех классов есть несколько типовых статических функция, которые меняют эти переменные. Естественно возникла идея, реализовать это в шаблоне. Собственно я сделал уже. Вот реализация: шаблон:
дочерние классы:
обращение к элементам:
Добавлено @ 14:40
А у меня такой код не скомпилился ![]() У тебя компилятор какой? У меня Builder C++6. |
Автор: bel_nikita 21.5.2004, 14:52 | ||||
Че-та я не понял. В чем проблема? Не понимаю зачем делать шаблон, если все переменныые int Вот код, все работает:
Добавлено @ 14:53 Компилер: MSVC6 |
Автор: gray_k 21.5.2004, 15:00 | ||
Это просто тестовый пример. Настоящая реализация другая. |
Автор: bel_nikita 21.5.2004, 15:12 |
gray_k А работает? У меня все ОК |
Автор: gray_k 21.5.2004, 15:24 |
Код во втором ответе работает![]() ![]() А то что я написал в вопросе не компилится, и про который ты сказал, что у тебя скомпилился. Ни на Борладе, ни на VC.NET. |
Автор: Sined 21.5.2004, 16:14 | ||||
gray_k, вот что у меня чработало в 6 билдере. Может быть... ошибка где-то рядом.
Работает даже так.
Ну я и идиот!!!! Слава Богу, пока репутации нет, а то сейчас получил бы по шапке. Пример, рабочий, однако в его интерпретации я сильно ошибся. Правильно, видимо,так 1) При наследовании от шаблонного класса ты создаешь по сути дела 2 класса свой+шаблонный. За этим шаблонным(например, Proba<int>)ты закрепляешь 1 статический тип данных, потом все классы типа Proba<int> будут этим членом данных пользоваться. 2) Теперь представь, что у тебя есть 2 класса наследующих от Proba<int> и в одном ты стат.член изменил, а вдругом он по идее изменится не может, НО по сути дела у тебя есть 4 класса 2 наследника(А,B) и 2 экземпляра Proba<int>, причем с неравными стат. членами, что просто противоречит определению стат.члена=> единственный возможный способ описан выше. |