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

Динамическое приложение с использованием шаблонов/конфигов - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Взять из интернет-страницы текст и заменить в нем символы http://www.cyberforum.ru/cpp-beginners/thread1787149.html
есть страничка: http://anicon.sknt.ru:8000 там есть строчка Currently playing: ____@____@____@___ интересует взять текст ____@____@____@___ и сохранить его в блокноте вместо @ поставить enter возможно ли такое? спасибо.
C++ Разделение класса со статической переменной в многофайловом проекте На ровном месте происходят какие-то непонятные чудеса, как будто бы я шаблонный класс объявляю - если реализация класса находится в заголовочном файле, то всё хорошо, но если я её перенесу в .срр, то у компилятора возникает внезапная слепота и он выдаёт ошибку "неопределённая ссылка на конструктор/метод/и т.п.". В чём жопа-то? Раньше такого не происходило. Это у меня проблемы с IDE/компилятором... http://www.cyberforum.ru/cpp-beginners/thread1787113.html
C++ НОД рекурсия, указатели
Всем привет. Почему в рекурсии ругается на параметры возвращаемые в качестве указателя? int task_1_NOD_R(int *input_1, int *input_2) { if (*input_2== 0) return *input_1; return task_1_NOD_R (*input_1, *input_1 % *input_2); //Тут ругается; }
Исправить ошибки в работе функции C++
Помогите, не работает, компилятор ошибки не выдает. Проблема, кажется, возникает при вызове функции genPass :wall: # include <iostream> # include <cstdlib> # include <ctime> # include <fstream> using namespace std; class Password
C++ Прерывание по таймеру http://www.cyberforum.ru/cpp-beginners/thread1787024.html
Здравствуйте! Возможно ли сделать в консольном приложении на Visual Studio так, чтобы во время работы одного из циклов программы, раз в 100 мс его деятельность прерывалась и выполнялась небольшая отдельная функция?
C++ Применение метапрограммирования Доброго времени суток форумчане. Собственно говоря, как часто применимо метапрограммирование в современном мире разработок на C++. И имеет ли оно большое значение в профессиональных сферах программирования? подробнее

Показать сообщение отдельно
Knuckles124
2 / 2 / 2
Регистрация: 05.07.2016
Сообщений: 11
31.07.2016, 11:12     Динамическое приложение с использованием шаблонов/конфигов
http://rextester.com/HRIM32691
Цитата Сообщение от C++
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <string>
 
struct Money
{
    std::string type;
    void *ptr;
 
    float fValue;
    int iValue;
    short sValue;
    unsigned char cValue;
};
 
int main()
{
    Money money;
 
    // Step1: Читаем конфиг, получаем тип переменной
    // (на самом деле вместо std::cin должно быть readConfig(structMoney& money)
    std::cout << "Enter type: float/int/short/byte" << std::endl;
    std::cin >> money.type;
 
    // Step:2 Получили тип, теперь делаем манипуляции, зависящие от типа
    if (money.type == "float")
    {
        money.fValue = 13500.0;
        money.ptr = &money.fValue;
    }
 
    else if (money.type == "int")
    {
        money.iValue = 1234567;
        money.ptr = &money.iValue;
    }
 
    else if (money.type == "short")
    {
        money.sValue = 257;
        money.ptr = &money.sValue;
    }
 
    else if (money.type == "byte")
    {
        money.cValue = 38;
        money.ptr = &money.cValue;
    }
 
    // Step 3: здесь какой-то код ,..,
    /*         Place your code here */
 
    // Step 4: где-то далеко-далеко абсолюнто в другом месте,
    //         возможно даже в другом файле,
    //         уже работаем с нужным значением
    if (money.type == "float")
    {
        std::cout << *(float*)money.ptr << std::endl;
    }
 
    else if (money.type == "int")
    {
        std::cout << *(int*)money.ptr << std::endl;
    }
 
    else if (money.type == "short")
    {
        std::cout << *(short*)money.ptr << std::endl;
    }
 
    else if (money.type == "byte")
    {
        // static_cast просто для вывода.
        // Если выводить char в консоль/на экран,
        // то выведится не его значение,
        // а символ, который соотвествует этому значению
        // ASCII (American Standard Code for Information Interchange)
 
        // Напримеp:
        // число 38 - его символ &
        // число 83 - его символ S
 
        std::cout << static_cast<short>(*(unsigned char*)money.ptr) << std::endl;
        std::cout << *(unsigned char*)money.ptr << std::endl;
    }
    else 
        std::cout << "Конфиг сломан, GG WP" << std::endl;
    
    return 0;
}
Добавлено через 1 минуту
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <string>
#include "Hero.h"
 
int main()
{
    Hero masterYoda;
 
    masterYoda.addInfo(HERO_INFO_HEALTH);
    masterYoda.addInfo(HERO_INFO_ARMOUR);
    masterYoda.addInfo(HERO_INFO_MONEY);
 
    masterYoda.printInfo();
 
    masterYoda.testTypes();
    
    return 0;
}
Цитата Сообщение от Hero.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
#pragma once
#ifndef HERO_H
#define HERO_H
#include <string>
 
enum HERO_INFO { HERO_INFO_HEALTH, HERO_INFO_ARMOUR, HERO_INFO_MONEY };
 
class Hero
{
public:
    Hero();
    ~Hero();
 
    void printInfo();
    void addInfo(HERO_INFO info);
    void testTypes();
 
private:
    struct Health
    {
        std::string type;
        void *ptr;
 
        float fValue;
        int iValue;
        short sValue;
        unsigned char cValue;
    };
    struct Armour
    {
        std::string type;
        void *ptr;
 
        float fValue;
        int iValue;
        short sValue;
        unsigned char cValue;
    };
    struct Money
    {
        std::string type;
        void *ptr;
 
        float fValue;
        int iValue;
        short sValue;
        unsigned char cValue;
    };
 
    Health hp;
    Armour ap;
    Money ma;
 
    template<class S>
    void getValue_(S &structure);
 
    template<class S>
    void putInfo_(S &structure);
};
 
#endif
Цитата Сообщение от Hero.cpp
Кликните здесь для просмотра всего текста
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
#include <iostream>
#include "Hero.h"
Hero::Hero() {}
Hero::~Hero() {}
 
void Hero::printInfo()
{
    std::cout << "_out [INFO]" << std::endl;
    std::cout << "You're Health Points: "; getValue_(hp); std::cout << std::endl;
    std::cout << "You're Armour Points: "; getValue_(ap); std::cout << std::endl;
    std::cout << "You're Money  Amount: ";  getValue_(ma); std::cout << std::endl;
}
 
void Hero::addInfo(HERO_INFO info) {
    switch (info)
    {
    case HERO_INFO_HEALTH:
        std::cout << "__in [HEALTH]" << std::endl;
        putInfo_(hp);
        break;
 
    case HERO_INFO_ARMOUR:
        std::cout << "__in [ARMOUR]" << std::endl;
        putInfo_(ap);
        break;
 
    case HERO_INFO_MONEY:
        std::cout << "__in [MONEY]" << std::endl;
        putInfo_(ma);
        break;
    }
}
 
template<class S>
void Hero::getValue_(S &structure)
{
    if (structure.type == "float")
    {
        std::cout << *(float*)structure.ptr;
    }
 
    else if (structure.type == "int")
    {
        std::cout << *(int*)structure.ptr;
    }
 
    else if (structure.type == "short")
    {
        std::cout << *(short*)structure.ptr;
    }
 
    else if (structure.type == "byte")
    {
        std::cout << static_cast<short>(*(unsigned char*)structure.ptr);
        //std::cout << *(unsigned char*)structure.ptr;
    }
    //return -1;
}
 
template<class S>
void Hero::putInfo_(S &structure)
{
    std::cout << "Enter type: float/int/short/byte" << std::endl;
    std::cin >> structure.type;
    std::cout << "Enter value: 13500.0 or 123457 or 12 or etc..." << std::endl;
 
    if (structure.type == "float")
    {
        std::cin >> structure.fValue;
        structure.ptr = &structure.fValue;
    }
 
    else if (structure.type == "int")
    {
        std::cin >> structure.iValue;
        structure.ptr = &structure.iValue;
    }
 
    else if (structure.type == "short")
    {
        std::cin >> structure.sValue;
        structure.ptr = &structure.sValue;
    }
 
    else if (structure.type == "byte")
    {
        // Сначала записываем в shortValue, потом записываем в cValue.
        // Eсли сразу записывать в cValue,
        // То запишется одна первая цифра введеного числа,
        // т.е. вместо ожидаемой записи 238 запишется только 2
        std::cin >> structure.sValue;
        structure.cValue = structure.sValue;
        structure.ptr = &structure.cValue;
    }
    std::cout << std::endl;
}
 
void Hero::testTypes()
{
    std::cout << std::endl;
 
    std::cout << "_out [DEBUG]" << std::endl;
    std::cout << ((hp.type == "int") ? "health is INT" : "health is'nt INT");
    std::cout << std::endl;
 
    std::cout << ((ap.type == "short") ? "armour is short" : "armour is'nt short");
    std::cout << std::endl;
 
    std::cout << ((ma.type == "float") ? "money is float" : "money is'nt float");
    std::cout << std::endl;
 
    Health hz = hp;
    Armour az = ap;
    Money za = ma;
    std::cout << std::endl;
}
Добавлено через 2 минуты
Вывод:
Цитата Сообщение от cmd
Кликните здесь для просмотра всего текста
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
__in [HEALTH]
Enter type: float/int/short/byte
int
Enter value: 13500.0 or 123457 or 12 or etc...
98
 
__in [ARMOUR]
Enter type: float/int/short/byte
byte
Enter value: 13500.0 or 123457 or 12 or etc...
56
 
__in [MONEY]
Enter type: float/int/short/byte
float
Enter value: 13500.0 or 123457 or 12 or etc...
18500.50
 
_out [INFO]
You're Health Points: 98
You're Armour Points: 56
You're Money  Amount: 18500.5
 
_out [DEBUG]
health is INT
armour is'nt short
money is float
 
Для продолжения нажмите любую клавишу . . .
 
Текущее время: 02:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru