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

Класс Singletone - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написание хэш-функции http://www.cyberforum.ru/cpp-beginners/thread1507953.html
Решил освоить хэш-функции, ну и, соответственно, написать реализации большинства. Вопросы неизбежны, поэтому, думаю, буду отписываться в теме. Первый возник сразу. В вики алгоритм MD5 расписан так: Шаг 1. Выравнивание потока Сначала дописывают единичный бит в конец потока (байт 0x80), затем необходимое число нулевых бит. Входные данные выравниваются так, чтобы их новый размер L' был сравним с...
C++ Нахождение суммы элементов между крайними четными членами ряда Задача ,найти сумму элементов между крайними четными членами ряда.#include <iostream> #include <stdio.h> using namespace std; int main(){ const int n=9; int A={1,1,1,2,1,3,8,1,1}; int min_cet; int max_cet; for (int i=0;i<n;i++){ if(A%2==0) http://www.cyberforum.ru/cpp-beginners/thread1507951.html
C++ Где ошибка?
Почему не вводятся имя, фамилия и возраст? Первые 3 пользователя вводятся. Четвертый не вводится Enter first name, last name and age > Viktor Ivanov 17 Enter first name, last name and age > Denis Petrov 18 Enter first name, last name and age > Aleksander Sigaev 19 // нажимаю Enter и ... Enter first name, last name and age > Viktor Ivanov 1 // ... эта строка сама ввелась !! 7...
Инициализация переменной C++
Приветствую уважаемые пользователи cyberforum! У меня появился вопрос по инициализации переменной с типом int Почему нельзя сделать вот так? const int 1_000_000_000 = 1000000000; Или вот так: int a = 1_000_000_000;
C++ Не получается из БД вывести всех зарегистрированных пользователей http://www.cyberforum.ru/cpp-beginners/thread1507818.html
snprintf(query,sizeof(query),"select acct_email,username from pvpgn_bnet"); result = sql->query_res(query); Row = sql->fetch_row(result); int acct_email = std::atoi( Row ); int username = std::atoi( Row ); sql->free_result(result); snprintf(msgtemp, sizeof(msgtemp), "1. %u / %u", acct_email, username); ...
C++ Изменить размер трехмерного вектора Товарищи, у меня есть массив вида vector<vector<int> > rand_num_first(220, vector<double>(3, 0)) (да и трехмерные тоже есть). Я по ходу программы изменяю его размеры (как число строк, так и число столбцов по отдельности). В моих нынешних примерах все строки содержат вектор по три числа, но встает вопрос, что делать, когда мне надо разное количество элементов в каждой строке? Сейчас я изменяю... подробнее

Показать сообщение отдельно
hoggy
5031 / 2114 / 403
Регистрация: 15.11.2014
Сообщений: 4,799
Завершенные тесты: 1
03.08.2015, 12:16     Класс Singletone
Цитата Сообщение от max_sk Посмотреть сообщение
должен существовать только один работающий пульс, независимо от того, какого он типа.
1.
закрывайте конструкторы ваших пульсов.

2.
делайте френдом функцию-фабрику пульса.

3.
эта функция контролирует, что позвать её можно только один раз:
при повторном вызове функция либо генерирует ошибку,
либо возвращает уже созданный закэшированный объект.


пример:

http://rextester.com/OFWPK41859

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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//Title of this code
//g++  4.9.2
 
#include <iostream>
 
 
class BasePulse;
class SqrPulse;
class LinearPulse;
class RndPulse;
 
struct Factory
{
    template<class T = LinearPulse> static 
    T& Get()
    {
        enum { eCHECK_SUCCESS = 
           std::is_same<T,SqrPulse>::value    ||
           std::is_same<T,LinearPulse>::value ||
           std::is_same<T,RndPulse>::value
        };
        
        static_assert( 
            eCHECK_SUCCESS,
            "ERROR: INVALID TYPE"
        );
        
        static T obj;
        
        auto* cur = GetBase();
        
        if(cur)
            return dynamic_cast<T&>(*cur);
        
        cur = &obj;
        return obj;
    }
    
private:
    static BasePulse* GetBase()
    {
        BasePulse* p = nullptr;
        return p;
    }
    
};
 
class BasePulse
{
protected:
    BasePulse(){}
public:    
    virtual void pulse() = 0;
};
 
class SqrPulse: BasePulse
{
    friend struct Factory;
protected:
    SqrPulse(){}
public:    
    virtual void pulse() { std::cout<<"SqrPulse\n"; };
};
 
class LinearPulse: BasePulse
{
    friend struct Factory;
protected:
    LinearPulse(){}
public:    
    virtual void pulse() { std::cout<<"LinearPulse\n"; };
};
 
class RndPulse: BasePulse
{
    friend struct Factory;
protected:
    RndPulse(){}
public:
    virtual void pulse() { std::cout<<"RndPulse\n"; };
};
 
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    auto& obj = Factory::Get<RndPulse>();
    obj.pulse();
    
}
Примечание:
в данном коде я опустил различные детали:
конструкторы копии, оператор= , и прочий джентельменский хлам,
который нужно доработать.
 
Текущее время: 19:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru