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

Не типизированный стек - C++

Восстановить пароль Регистрация
 
Dark Byte
6 / 23 / 4
Регистрация: 23.10.2014
Сообщений: 845
Завершенные тесты: 2
26.11.2014, 09:07     Не типизированный стек #1
еще один эксперимент в духе хз зачем написал и где это может пригодится
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
class Stack
{
private:
    struct Node
    {
        Node* prev = nullptr;
        unsigned char* data = nullptr;
    } *last = nullptr;
 
public:
    Stack() {}
 
    ~Stack()
    {
        while (last) pop();
    }
 
    template<typename T>
    void push(const T &data)
    {
        static_assert(!std::is_pointer<T>::value, "Type should not be a pointer");
        Node* tmp = new Node;
        tmp->prev = last;
        T* ptr = new T;
        *ptr = data;
        tmp->data = (unsigned char*) ptr;
        last = tmp;
    }
 
    void pop()
    {
        if (!last) return;
        delete last->data;
        Node* tmp = last->prev;
        delete last;
        last = tmp;
    }
 
    template<typename T>
    const T& peek() const
    {
        if (!last) throw("Stack is empty");
        return *((T*) last->data);
    }
};
Добавлено через 6 минут
з.ы. только надо четко указывать при вызове Peek какой тип хочешь получить
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.11.2014, 09:07     Не типизированный стек #2
Цитата Сообщение от Dark Byte Посмотреть сообщение
Не типизированный
Цитата Сообщение от Dark Byte Посмотреть сообщение
unsigned char* data
Цитата Сообщение от Dark Byte Посмотреть сообщение
static_assert(!std::is_pointer<T>::value, "Type should not be a pointer");
Серьезно?
Dark Byte
6 / 23 / 4
Регистрация: 23.10.2014
Сообщений: 845
Завершенные тесты: 2
26.11.2014, 09:10  [ТС]     Не типизированный стек #3
Цитата Сообщение от 0x10 Посмотреть сообщение
Серьезно?
а что? ну имелось ввиду что добавлять можно значения любых типов
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.11.2014, 09:19     Не типизированный стек #4
Цитата Сообщение от Dark Byte Посмотреть сообщение
а что?
См стандартный std::vector.
Dark Byte
6 / 23 / 4
Регистрация: 23.10.2014
Сообщений: 845
Завершенные тесты: 2
26.11.2014, 09:26  [ТС]     Не типизированный стек #5
Цитата Сообщение от 0x10 Посмотреть сообщение
См стандартный std::vector.
вектор не умеет добавлять значения всех типов, только одного выбранного при объявлении...
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
26.11.2014, 09:35     Не типизированный стек #6
Цитата Сообщение от Dark Byte Посмотреть сообщение
вектор не умеет добавлять значения всех типов, только одного
Повод задуматься: а нужен ли контейнер, хранящий никак не связанные между собой типы?
Если все-таки да, то обертка - это уже другая часть функционала. См boost::any.
Yandex
Объявления
26.11.2014, 09:35     Не типизированный стек
Ответ Создать тему
Опции темы

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