Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

15.07.2013, 09:12. Просмотров 501. Ответов 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
Можно ли эту проблему решить, или в данном случае от виртуальщины никак не избавиться?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.07.2013, 09:12
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Замена виртуальных функций шаблонами (C++):

Задача с шаблонами функций - C++
Необходимо написать программу, которая использует шаблон функции по имени Min для определения наименьшего из двух аргументов, используя...

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. - C++
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д.

Вызов функций с шаблонами из других файлов - C++
Всем здрасьте ! у меня есть 3 файла: main.cpp, wrap.h и wrap.cpp В wrap.h в namespace у меня объявлены функции с шаблонами: ...

Использование виртуальных функций - C++
Дан класс &quot;треугольник&quot;, который определяется длиной одной из сторон и значениями прилегающих двух углов. Создать соответствующие...

Таблица виртуальных функций - C++
Доброго дня! Не могу найти, подскажите, пожалуйста, таблица виртуальных функций же только одна для класса? И каждый его объект имеет...

Вызов виртуальных функций - C++
Доброго времени суток, форумчане! Стоит такая задача: Есть класс, который содержит три чисто виртуальные функции, назовём его IClass. ...

1
gray_fox
What a waste!
1522 / 1227 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
15.07.2013, 19:17 #2
Цитата Сообщение от Gorillych Посмотреть сообщение
в данном случае от виртуальщины никак не избавиться?
Думаю никак, если только какой-нибудь уродливый свич в Base... Если будет один базовый класс (а не два разных, как с шаблоном), то информации о типе наследника после приведения к указателю\ссылке на базовый класс уже не будет.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.07.2013, 19:17
Привет! Вот еще темы с ответами:

Механизм виртуальных функций - C++
Всем привет! Имею базовый абстрактный класс: class Interface { public: //функция детектирования устройства true - если команда...

Использование виртуальных функций - C++
Программа берет данные из двух файлов, в которых есть дата и количество проданных билетов, и высчитывает среднее количество проданных...

Таблица виртуальных функций - C++
объясните плиз кто разбирается.. есть абстрактный класс с двумя виртуальными функциями, от него наследуются два класса реализующие эти...

Перегрузка виртуальных функций - C++
please HELP! перегружаю виртуальную функцию в абстрактном классе. class ONE { virtual std::string FUN(const std::string&amp;...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

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