Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
#1

Статический контейнер для разных типов - C++

07.10.2012, 21:27. Просмотров 1982. Ответов 18
Метки нет (Все метки)

Доброго здоровица.
Как объявить контейнер для хранении различных типов?
Правилен ли такой метод?
C++
1
2
3
4
5
6
template <class T>
class MyContainer : std::map<std::string name, T>
{
    friend class Singleton<MyContainer, Mutex_NULL>;
    MyContainer() {}
};
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2012, 21:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Статический контейнер для разных типов (C++):

Определить наибольшее из 3 чисел для данных разных типов - C++
Напишите программу, которая позволяет определить наибольшее из 3 чисел для данных разных типов. Используйте template (C++)

Как сделать один шаблон для разных типов - C++
Предположим я реализую некоторый шаблонный класс, в котором, ну ради примера к объектам шаблонного типа (тип, используемый в заголовке...

Создать универсальный вектор для разных типов класса - C++
Нужно создать абстрактный класс, в котором будет метод Add(), типа вектор, но этот метод должен использоваться в трех классах наследниках,...

Сделать один метод для 3 разных типов массивов - C++
Не получается сделать один метод для 3 разных типов массивов... помогите пожалуйста // WorkShablon.cpp: определяет точку входа для...

Аргумент разных типов для одной функции (без перегрузки) - C++
День всем добрый! Я тут решил немного облегчить себе жизнь. У меня есть функция: void CombineWCHAR(WCHAR wchar_main, WCHAR...

Используя механизм перегрузки функции, вычислить для разных типов параметров - C++
Используя механизм перегрузки функции, разработать и отладить программу вычисление значения = f (x, y, z) для различных типов параметров....

18
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 21:31 #2
Эм... Из фраз "контейнер", "статический" и "разные типы" выбираете любые две.

Или "статический" и "разные типы" — кортеж.
Или "контейнер" и "статический" — но одного типа.
Или "контейнер" и "разные типы" — но с динамическими проверками типов.
0
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 21:50  [ТС] #3
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Эм... Из фраз "контейнер", "статический" и "разные типы" выбираете любые две.

Или "статический" и "разные типы" — кортеж.
Или "контейнер" и "статический" — но одного типа.
Или "контейнер" и "разные типы" — но с динамическими проверками типов.
кортеж

Добавлено через 15 минут
ну, что скажете?
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 21:53 #4
Тогда std::tuple (надо С++11) или boost::tuple (надо Boost).
0
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 21:58  [ТС] #5
а если?
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Или "контейнер" и "разные типы" — но с динамическими проверками типов.
0
OhMyGodSoLong
~ Эврика! ~
1244 / 993 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 22:03 #6
Тогда делаете контейнер из каких-нибудь boost::any или аналогов.
0
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 22:31  [ТС] #7
~OhMyGodSoLong~, как затайподефайнить кортедж?
C++
1
typedef template<class T> std::map<std::string, T> MyMap;
error C2059: синтаксическая ошибка: 'template<'
error C2065: T: необъявленный идентификатор
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
07.10.2012, 22:33 #8
vechestva, C++11?
а иначе typedef'ить темплейтные типы можно только внутри структур/классов/функций

C++
1
2
3
4
5
6
7
8
9
10
#include <map>
#include <string>
template<class T>
struct Map {
  typedef std::map<std::string, T> MyMap;
};
 
int main () {
  Map<int>::MyMap m;
}
на c++11
должно быть

C++
1
2
template <typename T> 
using MyMap = std::map<std::string, T> MyMap;
правда то ли я неправильно делаю, то ли мой компилятор такого не поддерживает
1
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
07.10.2012, 22:55 #9
Цитата Сообщение от vechestva Посмотреть сообщение
как затайподефайнить кортедж?
C++
1
typedef template<class T> std::map<std::string, T> MyMap;
Кортеж? При чём тут тогда template и map?
C++
1
typedef std::tuple<Foo, Bar, Baz> Qux;
0
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:12  [ТС] #10
млин!
Я хочу создать map с разными типами.
И после тайподефайнить его.
Вот вам и вопрос.

Без нового стандарта.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
07.10.2012, 23:14 #11
vechestva, c разными типами, но одним ключом?
зачем тайпдефить?
я не понимать зачем тут мап
0
I.M.
565 / 548 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
07.10.2012, 23:23 #12
Цитата Сообщение от vechestva Посмотреть сообщение
млин!
Я хочу создать map с разными типами.
И после тайподефайнить его.
Вот вам и вопрос.

Без нового стандарта.
Тогда, видимо, никак. Вряд ли у вас есть boost.
Даже если вы наваяете шаблон вида std::map<std::string, T>, то тип Т - это все равно один тип. И в одну мапу объекты разных типов запихнуть не получится.

А насколько много разных типов надо туда запихать? может есть смысл использовать union или struct?
0
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:30  [ТС] #13
с одним ключём для каждого типа.
Он будет статичным, или как крестовики говорят "синглтон".
SomeObject someObject;
...
C++
1
sMyContainer(SomeObject)->insert(pair<string, SomeObject>("ObjectName", someObject));
Добавлено через 1 минуту
а затайподефайнить нужно, чтобы можно было удобнее работать с итераторами.

Добавлено через 2 минуты
Цитата Сообщение от I.M. Посмотреть сообщение
Тогда, видимо, никак. Вряд ли у вас есть boost.
Даже если вы наваяете шаблон вида std::map<std::string, T>, то тип Т - это все равно один тип. И в одну мапу объекты разных типов запихнуть не получится.

А насколько много разных типов надо туда запихать? может есть смысл использовать union или struct?
я в первом посту спросил, правильный ли метод реализаций:
C++
1
2
3
4
5
6
7
8
template <class T>
class MyContainer : std::map<std::string name, T>
{
    friend class Singleton<MyContainer, Mutex_NULL>;
    MyContainer() {}
};
 
#define sMyContainer(T) Singleton<MyContainer<T>, Mutex_NULL>::Instance()
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
07.10.2012, 23:33 #14
это какойто ад
насколько вы представляете что делаете?
Цитата Сообщение от vechestva Посмотреть сообщение
я в первом посту спросил, правильный ли метод реализаций:
нет, у вас будут объекты одного типа
0
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:37  [ТС] #15
Цитата Сообщение от alex_x_x Посмотреть сообщение
это какойто ад
насколько вы представляете что делаете?
за то пользоваться удобно.
Вот только сам
C++
1
std::map<std::string, T>
не могу затайподефайндить

Добавлено через 1 минуту
Цитата Сообщение от alex_x_x Посмотреть сообщение
нет, у вас будут объекты одного типа
как это так?
Объекты в MyContainer разные
0
07.10.2012, 23:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2012, 23:37
Привет! Вот еще темы с ответами:

Создание шаблонной функции для работы с массивами разных типов данных - C++
Здравствуйте. Столкнулся со следующей проблемой: не могу написать шаблонную функцию подсчета суммы элементов в массиве между первым и...

Можно ли создать свой перегруженный вариант функций, для разных типов потока - C++
Доброго времени суток. Хотелось бы задать несколько вопросов, ответы на которые мне не удалось найти в справочнике. 1. Можно ли...

Функция swap перестановки значений двух переменных для данных разных типов. Используйте template - C++
не могу решить ( честно говоря вообще не понимаю его ) ((((( Напишите функцию swap перестановки значений двух переменных для данных...

добавление в контейнер без указания типов данных? - C++
Привет, у меня проблема. Сразу перейду к коду: template &lt;class structType&gt; class CMyExperimentator { private: ...


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

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

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