Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
NikitoZZZ
4 / 4 / 3
Регистрация: 28.09.2013
Сообщений: 152
1

Как описать шаблонную переменную в классе, тип которой заранее неизвестен ?

24.09.2015, 21:48. Просмотров 860. Ответов 7
Метки нет (Все метки)

В классе имеется поле с данными. Мне нужно, чтобы эти данные были типа vector или типа forward_list в зависимости от ситуации. Как это реализовать ?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.09.2015, 21:48
Ответы с готовыми решениями:

Как описать переменную в классе, тип которой заранее неизвестен?
Есть класс , в кот куча всяких методов, все работает, все хорошо. Но есть одно большле НО, у...

Как обьявить переменную в одном классе и что бы ее было видно в дочернем классе
У меня есть основной класс с названием Root один из его членов наследует дочерний класс SubRoot....

Шаблоны, древовидная сортировка: как правильно передавать тип в шаблонную функцию?
Реализую собственную версию древовидной сортировки на основе шаблонов. Нужно сравнение производить...

Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой системе координат
Описать переменную круг, в которой содержатся все дан* ные для построения круга в декартовой...

Описать шаблонную функцию в cpp-файле
файл h template < class T > class B_tree { private: struct T_node { friend class...

7
nmcf
6277 / 5578 / 2539
Регистрация: 14.04.2014
Сообщений: 23,471
24.09.2015, 21:57 2
Ситуация какая? Это на этапе компиляции определяется или в процессе работы программы?
0
NikitoZZZ
4 / 4 / 3
Регистрация: 28.09.2013
Сообщений: 152
24.09.2015, 21:58  [ТС] 3
C++
1
2
3
4
5
template <typename Type, typename Policy> class Cointainer {
    ...
private:
    std::vector <Type> data;
};
Вот тут мне иногда может понадобиться вектор, а иногда список, но 2 класса с одинаковыми функциями я делать для этого не хочу.
0
nmcf
6277 / 5578 / 2539
Регистрация: 14.04.2014
Сообщений: 23,471
24.09.2015, 22:07 4
Лучший ответ Сообщение было отмечено NikitoZZZ как решение

Решение

C++
1
2
3
4
5
6
7
8
template <typename Type, typename Policy> class Cointainer {
    ...
private:
    Type data;
};
 
Cointainer<std::vector<int>, int> c;
Cointainer<std::forward_list<int>, int> c1;
1
NikitoZZZ
4 / 4 / 3
Регистрация: 28.09.2013
Сообщений: 152
24.09.2015, 22:14  [ТС] 5
Спасибо огромное ! Вы меня выручили !
0
DiffEreD
1442 / 779 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
24.09.2015, 22:18 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename Type, bool Policy = false>
struct Container
{
    using Cont_t = typename std::conditional<Policy,
                            std::vector<Type>,
                            std::forward_list<Type>>::type;
    Cont_t data;
};
 
int main()
{
    Container<int> c;
    c.data.push_front(42); // ok
    //c.data.push_back(42); // error
 
    Container<int, true> c2;
    //c2.data.push_front(42); // error
    c2.data.push_back(42); // ok
}
0
hoggy
Нарушитель
Эксперт С++
7087 / 3130 / 648
Регистрация: 15.11.2014
Сообщений: 7,209
Завершенные тесты: 1
24.09.2015, 22:39 7
Цитата Сообщение от NikitoZZZ Посмотреть сообщение
Мне нужно, чтобы эти данные были типа vector или типа forward_list в зависимости от ситуации. Как это реализовать ?
реализация зависит от ситуации.
0
Tulosba
:)
Эксперт С++
4749 / 3243 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
24.09.2015, 23:04 8
Дабы не дублировать типы в шаблоне и при этом позволять задавать разные контейнеры, можно использовать template template параметры:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <forward_list>
#include <iostream>
#include <memory>
#include <vector>
 
template <template <class,class> class C, class T, class A = std::allocator<T>>
struct S{
    C<T,A> data;
};
 
int main() {
    S<std::vector,int> vi;
    vi.data.push_back(42);
}
0
24.09.2015, 23:04
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.09.2015, 23:04

Как вернуть обьект тип которого заранее неизвестно
решил поучить паттерны, застрял малость на одном, а точнее на его реализации, паттер называеться...

Как объявить переменную в классе?
Доброго времени суток. Как правильно объявить переменную в private: Делаю так: private:...

Как можно объявить класс, заранее не зная его тип template.
Класс: template &lt;class type&gt; class My { private: int n; double sum; type *al; public:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru