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

Аргументы шаблонного метода как объекты - C++

Восстановить пароль Регистрация
 
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
08.07.2013, 00:09     Аргументы шаблонного метода как объекты #1
Не могу решить одну задачу.

вот три класса

C++
1
2
3
class win  {};
class obj1 {};
class obj2 {};
Есть класс win, в котором есть функция (я хочу, чтобы она принимела в качестве аргументов указатель либо на obj1, либо на obj2)

C++
1
2
3
4
5
6
7
8
9
10
11
template <class A>
void Window::add_elem(A *elem)
{
        if(typedef(elem) == obj1)  elem->set_parent(this);   // метод из класса obj1 (есть только там)
        if(typedef(elem) == obj2)  elem->show();               // метод из класса obj2 (есть только там)
}
 
win win1;
obj1 object;
 
win1.add_elem(&object);

Я понимаю, что это elem->set_parent(this); неправильно, но как мне добиться желаемого результата?

Добавлено через 4 минуты
Вот ошибки

C++
1
2
3
4
5
6
7
 Object: недопустимое использование этого типа в качестве выражения
см. объявление 'obj1'
см. ссылку на создание экземпляров функции шаблон при компиляции "void win::add_elem<obj1>(A *)"
1>        with
1>        [
1>            A=obj1
1>        ]
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.07.2013, 00:09     Аргументы шаблонного метода как объекты
Посмотрите здесь:

итераты как аргументы в фунции C++
C++ Как вынести реализацию методов шаблонного класса в отдельный файл?
Функция создает объекты и указателями на них заполняет массив. При выходе из функции вызываются деструкторы объектов. Как сохранить объекты? C++
с++ командная строка, Вывести все нечисловые аргументы, но выводит все аргументы чего-то, C++
C++ Как прописать шаблонную функцию внутри шаблонного класса?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
08.07.2013, 00:09     Аргументы шаблонного метода как объекты #2
Если правильно понял, нужна специализация шаблона:
C++
1
2
3
4
5
6
7
8
9
template <>
inline void Window::add_elem(obj1 *elem) {
   elem->set_parent(this);
}
 
template <>
inline void Window::add_elem(obj2 *elem) {
  elem->show();
}
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
08.07.2013, 00:18  [ТС]     Аргументы шаблонного метода как объекты #3
Цитата Сообщение от gray_fox Посмотреть сообщение
Если правильно понял, нужна специализация шаблона:
C++
1
2
3
4
5
6
7
8
9
template <>
inline void Window::add_elem(obj1 *elem) {
   elem->set_parent(this);
}
 
template <>
inline void Window::add_elem(obj2 *elem) {
  elem->show();
}
Вот написал в самом классе

C++
1
2
3
4
5
6
7
8
9
    template <>
    void add_elem(ob1 *elem)
    {
    }
 
    template <>
    void add_elem(ob2 *elem) 
    {
    }
и вот ошибки

C++
1
2
явная специализация; 'void win::add_elem(ob1*)' не является специализацией функции-шаблона
явная специализация; 'void win::add_elem(obj2 *)' не является специализацией функции-шаблона
gray_fox
What a waste!
 Аватар для gray_fox
1244 / 1127 / 53
Регистрация: 21.04.2012
Сообщений: 2,350
Завершенные тесты: 3
08.07.2013, 00:24     Аргументы шаблонного метода как объекты #4
Нужен сам шаблон метода, что бы его специализировать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class win {
 
   // ...
 
   template<typename T>
   void add_elem(T *);
 
   // ...
};
 
template <>
inline void win::add_elem(ob1 *elem)
{
}
 
template <>
inline void win::add_elem(ob2 *elem) 
{
}
Добавлено через 3 минуты
хотя можно просто перегрузить)
C++
1
2
3
4
5
6
7
8
9
10
class win {
 
   // ...
 
   void add_elem(ob1 * elem) { /* ... */ }
 
   void add_elem(ob2 * elem) { /* ... */ }
 
   // ...
};
Egor138
 Аватар для Egor138
30 / 11 / 2
Регистрация: 10.08.2012
Сообщений: 619
Записей в блоге: 2
08.07.2013, 00:26  [ТС]     Аргументы шаблонного метода как объекты #5
gray_fox, А вот за это ПРОСТО ОГРОМНОЕ СПАСИБО!!!
Я даже не знал о таких трюках с шаблонами!!!

Спасибо Большое!
DU
1477 / 1053 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
08.07.2013, 00:27     Аргументы шаблонного метода как объекты #6
delete
Yandex
Объявления
08.07.2013, 00:27     Аргументы шаблонного метода как объекты
Ответ Создать тему
Опции темы

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