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

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

Войти
Регистрация
Восстановить пароль
 
Gorillych
14 / 14 / 1
Регистрация: 04.07.2013
Сообщений: 76
#1

Замена виртуальных функций шаблонами - C++

15.07.2013, 09:12. Просмотров 433. Ответов 1
Метки нет (Все метки)

Такая задача - нужно заменить виртуальные функции шаблонами. Можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
struct Derived1;
struct Derived2;
 
template <typename T>
struct Base
{
    void f();
};
 
template<>
void Base::f<Derived1>(){std::cout<<"Derived1\n";}
 
template<>
void Base::f<Derived2>(){std::cout<<"Derived2\n";}
 
 
struct Derived1 : public Base {};
struct Derived2 : public Base {};
Это работает, но если нужно сделать контейнер/массив указателей на объекты, то уже не получается:
C++
1
2
3
std::vector<Base*> vec;//не получится - нужно указывать параметр для Base
vec.push_back(new Derived1);//Нужна аналогия виртуального полиморфизма
vec[0]->f();//Вызов f() у Derived1
Можно ли эту проблему решить, или в данном случае от виртуальщины никак не избавиться?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 09:12     Замена виртуальных функций шаблонами
Посмотрите здесь:

таблица виртуальных функций C++
C++ Таблица виртуальных функций
C++ перегрузка виртуальных функций
В чем смысл виртуальных функций? C++
Практическое применение виртуальных функций C++
Использование виртуальных функций C++
C++ Задача с шаблонами функций
Странное наследование виртуальных функций C++
C++ Механизм виртуальных функций
ООП перезагрузка виртуальных функций C++
Использование виртуальных функций C++
C++ Вызов виртуальных функций

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
gray_fox
What a waste!
1253 / 1136 / 54
Регистрация: 21.04.2012
Сообщений: 2,359
Завершенные тесты: 3
15.07.2013, 19:17     Замена виртуальных функций шаблонами #2
Цитата Сообщение от Gorillych Посмотреть сообщение
в данном случае от виртуальщины никак не избавиться?
Думаю никак, если только какой-нибудь уродливый свич в Base... Если будет один базовый класс (а не два разных, как с шаблоном), то информации о типе наследника после приведения к указателю\ссылке на базовый класс уже не будет.
Yandex
Объявления
15.07.2013, 19:17     Замена виртуальных функций шаблонами
Ответ Создать тему
Опции темы

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