Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
C++ Переписать программу под однонаправленный список нужно переделать программу так чтобы получился однонаправленный список , а действия выполнялись бы те же самые. #include<stdio.h> #include<iostream> #include<math.h> struct dek { int a; dek*link; }; int main () { int k,n; https://www.cyberforum.ru/ cpp-beginners/ thread1807162.html Реализовать оператор умножения класса C++
Только начал работать с классами и мне не совсем понятно, как работать с операторами, вот что у меня получилось: class Matrix { public: float **A; unsigned n, m; float b; ...
C++ В заданную матрицу добавить указанное количество строк, начиная со строки с номером N Много способов перепробовал, помогите пожалуйста: Добавить К строк, начиная со строки с номером N в динамическом массиве. #include "stdafx.h" #include <iostream> #include <iomanip> using namespace std; int main() https://www.cyberforum.ru/ cpp-beginners/ thread1807140.html C++ Ввести целое число N, вывести его в 3-ичной системе счисления Ввести целое число N, вывести его в 3-ичной системе счисления. https://www.cyberforum.ru/ cpp-beginners/ thread1807130.html
C++ Работа со строками. str.replace
доброго времени суток. не удаётся воспользоваться функцией replace. делаю вот так pos=str.find(buf); // вычисляю позицию, с которой требуется заменить str.replace(pos,buf.length(),buf); // собственно, сама замена ругается на pos, вылетает со страшной ошибкой типа terminate called after throwing an instance of std::out_of_range. если вместо pos в replace вставить любое другое число - всё...
C++ Нюансы синтаксиса: что означает запись po.npos; s.erase; s.insert ? https://www.cyberforum.ru/ cpp-beginners/ thread1807087.html
Что в контексте этого кода значат po.npos; s.erase; s.insert ? if(po!=std::string::npos) { s.erase(po,s1.length()); s.insert(po,str);
C++ Программа не распознает русские буквы https://www.cyberforum.ru/ cpp-beginners/ thread1807075.html
Я написала программный код, но у меня не распознаются русские буквы, и следовательно не выполняется поиск элементов. Как можно исправить эти ошибки? Вот задание: Сформировать динамический массив из элементов структурного типа. Распечатать сформированный массив. Выполнить поиск элементов в массиве, удовлетворяющих заданному в варианте условию и сформировать из них новый массив. Распечатать...
C++ Сортировка двухмерного динамического массива
Доброго времени суток. Столкнулся с проблемой при сортировке двухмерного динамического массива, а именно: первые y-1 элементы (у - число строк) заполняются значениями "-33686019", а дальше сортирует норм (по возрастанию). Уже пару часов сижу и не понимаю, как это исправить. Пишу в VisualStudio Enterprize 2015. При анализе кода, она выдавала, что мол размер mas равен 8 байтам, а я пытаюсь записать...
C++ Написать программу для перестановки чисел согласно условию https://www.cyberforum.ru/ cpp-beginners/ thread1807051.html
Помогите написать программу для перестановки чисел в таком виде, пример: 123-132, 234-243, 345-354, то есть, что бы последние две цифры менялись местами.
C++ Найти причины возникновения ошибок в коде и исправить эти ошибки https://www.cyberforum.ru/ cpp-beginners/ thread1807045.html
Уважаемые форумчане, тут вот изучал дружественные методы, классы и функции и наткнулся вот на токую проблему, найти ответ на нее сразу не удалось, в источнике все работало(на видео), там использовали стандарт с++11, у меня mvs-2013 Вот собственно код(один в один как на видео): class A1; class B1{ public: void append(A1 const& a){ append(a.str); } //Ругается на (a.str)
C++ Считывание регистра
Имеется программа-переводчик с английского на русский. Словарь реализован в виде txt файла куда занесены пары англ.слово_русский перевод. Естественно в нижнем регистре. Задача состоит в том чтобы при вводе с верхним (почему то хочу сказать большим) регистром оно находило соответствия в файле и выдавало перевод. Прошу совета студенту-чайнику. Благодарю. #include "stdafx.h" #include <algorithm>...
C++ Ввести с клавиатуры вещественное (double) значение x, вывести соответствующее значение y для функции y = f(x) Всем привет! Нужна помощь в решение данной задач... Буду очень признателен :) График функции y = f(x) задан точками, соединенными прямыми отрезками. Вот эти точки: (–oo, 0), (–2, 0), (–1, –1), (1, 1), (2, 0), (+oo, 0). Ввести с клавиатуры вещественное (double) значение x, напечатать соответствующее значение y. https://www.cyberforum.ru/ cpp-beginners/ thread1807008.html
495 / 209 / 70
Регистрация: 27.05.2016
Сообщений: 557
14.09.2016, 14:36  [ТС] 0

Abstract Factory, переделка примера из книги Александреску с variadic templetes - C++ - Ответ 9540603

14.09.2016, 14:36. Показов 1886. Ответов 5
Метки (Все метки)

Ответ

Решил сам. Так :
enemyHierarchyFactory.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#ifndef ABSTRACTFACTORY_ENEMYHIERARCHYFACTORY_H
#define ABSTRACTFACTORY_ENEMYHIERARCHYFACTORY_H
 
#include <memory>
#include <tuple>
 
template <typename T>
struct Type2Type
{
    using type = T;
};
 
template <typename T>
class AbstractFactoryUnit
{
public:
    virtual std::unique_ptr<T> DoCreate(Type2Type<T>) = 0;
 
    virtual ~AbstractFactoryUnit() = default;
};
 
template <template <typename> class Unit, typename ... AbstractProducts>
class AbstractFactory : public Unit<AbstractProducts>...
{
protected:
    using ProductList = std::tuple<AbstractProducts...>;
public:
    template <typename T>
    std::unique_ptr<T> Create()
    {
        Unit<T>& unit = *this;
        return unit.DoCreate(Type2Type<T>());
    }
};
 
template <typename ConcreteProduct, typename Base, std::size_t Index>
class ConcreteFactoryUnit : public Base
{
    using BaseProductList = typename Base::ProductList;
    static constexpr std::size_t ProductSize = std::tuple_size<BaseProductList>::value;
public:
 
    using AbstractProduct = std::tuple_element_t<ProductSize - Index - 1, BaseProductList>;
 
    std::unique_ptr<AbstractProduct>
    DoCreate(Type2Type<AbstractProduct>) override
    {
        return std::make_unique<ConcreteProduct>();
    }
};
 
template <typename AbstractFact, template <typename, typename, std::size_t> class Unit,
          typename ... ConcreteProducts>
class ConcreteFactory;
 
template <typename AbstractFact, template <typename, typename, std::size_t> class Unit,
          typename T, typename ... ConcreteProducts>
class ConcreteFactory<AbstractFact, Unit, T, ConcreteProducts...>
        : public Unit<T, ConcreteFactory<AbstractFact, Unit, ConcreteProducts...>, sizeof...(ConcreteProducts)>
{
};
 
template <typename AbstractFact, template <typename, typename, std::size_t> class Unit,
          typename ConcreteProduct>
class ConcreteFactory<AbstractFact, Unit, ConcreteProduct>
        : public Unit<ConcreteProduct, AbstractFact, 0>
{
 
};
 
#endif //ABSTRACTFACTORY_ENEMYHIERARCHYFACTORY_H
main
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#include <iostream>
#include <memory>
#include "enemy.h"
#include "enemyfactory.h"
 
int main()
{
    using AbstractEnemyFactory =
    AbstractFactory<AbstractFactoryUnit,
    Soldier,
    Monster,
    SuperMonster>;
 
    using EasyFactory =
    ConcreteFactory<AbstractEnemyFactory, ConcreteFactoryUnit,
    SillySoldier,
    SillyMonster,
    SillySuperMonster>;
 
    std::unique_ptr<AbstractEnemyFactory> pFactory{new EasyFactory};
    std::unique_ptr<Enemy> pEnemy = pFactory->Create<Monster>();
    pEnemy->info();
 
    pEnemy = pFactory->Create<Soldier>();
    pEnemy->info();
 
    using HardFactory =
    ConcreteFactory<AbstractEnemyFactory, ConcreteFactoryUnit,
    BadSoldier,
    BadMonster,
    BadSuperMonster>;
 
    pFactory.reset(new HardFactory);
    pEnemy = pFactory->Create<Monster>();
    pEnemy->info();
 
    pEnemy = pFactory->Create<Soldier>();
    pEnemy->info();
}


Добавлено через 39 секунд
Цитата Сообщение от DrOffset Посмотреть сообщение
Если не решишь сам, то вечером покажу примерную реализацию.
Да, хотелось бы увидеть.

Вернуться к обсуждению:
Abstract Factory, переделка примера из книги Александреску с variadic templetes C++
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.09.2016, 14:36
Готовые ответы и решения:

Abstract factory
Как более грамотно можно переписать на джаве? class operation { public: virtual double...

Abstract Factory pattern
Всем привет, является ли такой подход реализацией паттерна в шапке, и что думаете на счет...

Объясните паттерн Абстрактная фабрика (Abstract Factory)
Изучаю паттерны и застрял на одном из них. Есть код описывающий паттерн абстрактной фабрики. ...

Использование совместно паттернов Builder и Abstract Factory
Добрый день. При изучении паттернов возникла идя написать программу моделирующую процесс...

5
14.09.2016, 14:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.09.2016, 14:36
Помогаю со студенческими работами здесь

Курсовая работа Паттерн «Абстрактная фабрика/Abstract Factory»
Задание на курсовой проект: Паттерн «Абстрактная фабрика/Abstract Factory». Реализация 2-х/3-х...

ProxyServer поддержка httpS переделка примера
Вообщем на многим известном ресурсе нашел пример using System; using...

Variadic Templates - как обращаться к аргументам variadic-функции?
Всем привет! Наверное, рано мне ещё с моими скудными знаниями в это лезть, но, изучив шаблоны и...

Class is not abstract and doesn't override abstract method destroyApp(boolean)
Занялся програмированием,взял самый простой код &quot;hello.World!&quot;,но в нём было много ошибок,я их...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru