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

strategy pattern - C++

Восстановить пароль Регистрация
 
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 304
25.11.2010, 02:15     strategy pattern #1
Как можно понять етот пример? а т.е. ведь метод DoAlgorithm(); не может быть вызван в этом месте: theStrategy.DoAlgorithm() ; И зачем нам нужен Context<MyStrategy> aContext??

Как в мейне вызывать тогда?
Как бы можно понятние расписать этот пример?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class AStrategy>
class Context {
    void Operation()
    {
    theStrategy.DoAlgorithm() ; 
    } 
private : 
    AStrategy theStrategy;
}; 
 
class MyStrategy {
public:
    void DoAlgorithm();
};
 
Context<MyStrategy> aContext;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2010, 02:15     strategy pattern
Посмотрите здесь:

Паттерн Strategy и игрушка C#
Template Method Pattern C++
Использование паттерна Strategy PHP
паттерн strategy PHP ООП
.RAW to JPEG with Bayer Pattern C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.11.2010, 13:36     strategy pattern #2
zhenya.ya,
C++
1
2
3
4
int main()
{
    aContext.Operation();
}
А что сложного в примере?
Есть шаблонный класс Context с шаблонным членом theStrategy.
Шаблонная функция вызывает метод DoAlgorithm(коий обязан являться членом класса/структуры, в общем типа, который является шаблонным параметром класса Context или его базового класса).

Далее описывается класс MyStrategy в котором объявляется (а где определение?) функция void DoAlgorithm().

Далее создается объект класса Context с шаблонным параметром MyStrategy под названием aContext
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
25.11.2010, 17:27     strategy pattern #3
Шаблон — это текст, в который подставляются конкретные типы или значения на этапе компиляции, поэтому с параметрами шаблона можно делать что угодно. Главное, чтобы подставляемый тип удовлетворял всем условиям, предъявленным ему шаблоном.
Например:
C++
1
2
3
4
template <typename type>
struct test {
    void method (const type & value) { value.some_action(); }
};
Данный шаблон может быть конкретизирован любым классом, в котором определён метод "some_action".
Вернее, конкретизирован он может быть совершенно любым классом или типом, например,
C++
1
test<int> t;
но при вызове метода "method" произойдёт ошибка.
Genius Ignat
1233 / 771 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
25.11.2010, 17:30     strategy pattern #4
но при вызове метода "method" произойдёт ошибка.
Стандартные типы не имеют методов.
volovzi
266 / 168 / 8
Регистрация: 14.03.2010
Сообщений: 501
25.11.2010, 17:35     strategy pattern #5
Genius Ignat, важное и своевременное замечание.
Yandex
Объявления
25.11.2010, 17:35     strategy pattern
Ответ Создать тему
Опции темы

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