![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Ivan. |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
Как расшарить методы для схожего шаблонного класса:
В данном случаи преведение к TBase<T, 1> дает нам объединение тел метода Find для различных выриантов Size, но метод _Find закрыт для класса например TBase<T, 5> Создавать друзей для всех вариантов Size сами понимаете... Как бы сделать типа:
-------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
||||
|
|||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Раз он не зависит от Size, то вынести в базовый класс. Добавлено через 2 минуты и 12 секунд Или, если это не приемлемо(вспоминается, что у тебя там какие-то проблемы с базовыми классами), то в non-member ф-цию(которую сделать friend'ом TBase<T, 1>. Лучше
-------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| akizelokro |
|
||||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Боюсь, что такого рода вызов
применительно к объекту TBase<T, 5> приведет к ошибке даже с использованием friend. Ты можешь просто сделать дружественную функцию
А впрочем, здесь уже и public не нужен. Это сообщение отредактировал(а) akizelokro - 29.10.2007, 14:57 -------------------- a = a + b; b = a - b; a = a - b; |
||||||
|
|||||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
с наследованием у меня действительно проблемы, точнее не у меня а у C++, так как дочерний класс нельзя инициализировать через {...}.
А со вторым способом я чтото не допонял, можно по подробней? -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Не уверен, что reinterpret_cast здесь будет работать.
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Почему? Ну если брать не мифическое ограничение стандарта, а реальные реализации... 0_о. -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| akizelokro |
|
||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
У функции _Find не видно спецификатора const.
более поздняя мысль.
кажется мне не приемлемой идеей. Если, предположим, функция _Find реализована в виде
то, может статься Это сообщение отредактировал(а) akizelokro - 29.10.2007, 15:38 -------------------- a = a + b; b = a - b; a = a - b; |
||||
|
|||||
| Ivan. |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 2.11.2004 Репутация: 1 Всего: 2 |
В твоем предположении есть небольшая ошибка, цикл реализован не по Size, а по Count, каторый проинициализирован перед массивом. Во-вторых, это примитивный пример, чтобы было понятно, что я хочу. На самом деле все гораздо сложнее. В-третих я нихрена не понял ваши дружественные функции и т.д. -------------------- Я могу ВСЁ, вопрос - сколько времени у меня это займет! |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Пример, который я привел, всего лишь пример, с помощью которого я на пальцах хотел показать опасность применения reinterpret_cast в данном конкретном случае шаблона с параметром-значением. Ты можешь его применять, но должен разбираться в последствиях, к чему это может привести. Base<T,1> - тип, отличный от Base<T, 5> и желательно работать с ними как с разными типами.
Про friend функцию или класс. В чем у тебя закавыка? Как объявлять функцию или класс дружественной, все знают. В случае шаблонов это немного усложняет запись. С учетом того, что Base<T, 1> и Base<T, 5> разные типы (примитивно говоря), ты можешь делать дружественными функцию или класс со связанными или несвязанными параметрами. template<class T, int SIZE> class Base { friend int Find<T, SIZE> (T value); //дружественная функция со связанными параметрами T == T, SIZE == SIZE friend class Anything<Type, S>; // несвязанные параметры, T != Type, SIZE != S } -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Хорошо было бы ещё передавать ей некое подобие this(иначе от дружественности большого толку не будет). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Find<T, 1> ( *( this->Data ) )?
-------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |