Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47

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

07.10.2012, 21:27. Показов 6944. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.10.2012, 21:27
Ответы с готовыми решениями:

Нужен динамический контейнер, который будет соединять разные переменные, разных типов в блоки
В общем нужен динамический контейнер... который будет соединять разные переменные, разных типов в блоки. Например есть поля Edit и Combo,...

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

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

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

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

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

Добавлено через 15 минут
ну, что скажете?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 21:53
Тогда std::tuple (надо С++11) или boost::tuple (надо Boost).
0
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 21:58  [ТС]
а если?
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Или "контейнер" и "разные типы" — но с динамическими проверками типов.
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 22:03
Тогда делаете контейнер из каких-нибудь boost::any или аналогов.
0
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 22:31  [ТС]
~OhMyGodSoLong~, как затайподефайнить кортедж?
C++
1
typedef template<class T> std::map<std::string, T> MyMap;
error C2059: синтаксическая ошибка: 'template<'
error C2065: T: необъявленный идентификатор
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
07.10.2012, 22:33
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
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
07.10.2012, 22:55
Цитата Сообщение от 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
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:12  [ТС]
млин!
Я хочу создать map с разными типами.
И после тайподефайнить его.
Вот вам и вопрос.

Без нового стандарта.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
07.10.2012, 23:14
vechestva, c разными типами, но одним ключом?
зачем тайпдефить?
я не понимать зачем тут мап
0
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
07.10.2012, 23:23
Цитата Сообщение от vechestva Посмотреть сообщение
млин!
Я хочу создать map с разными типами.
И после тайподефайнить его.
Вот вам и вопрос.

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

А насколько много разных типов надо туда запихать? может есть смысл использовать union или struct?
0
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:30  [ТС]
с одним ключём для каждого типа.
Он будет статичным, или как крестовики говорят "синглтон".
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
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
07.10.2012, 23:33
это какойто ад
насколько вы представляете что делаете?
Цитата Сообщение от vechestva Посмотреть сообщение
я в первом посту спросил, правильный ли метод реализаций:
нет, у вас будут объекты одного типа
0
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:37  [ТС]
Цитата Сообщение от alex_x_x Посмотреть сообщение
это какойто ад
насколько вы представляете что делаете?
за то пользоваться удобно.
Вот только сам
C++
1
std::map<std::string, T>
не могу затайподефайндить

Добавлено через 1 минуту
Цитата Сообщение от alex_x_x Посмотреть сообщение
нет, у вас будут объекты одного типа
как это так?
Объекты в MyContainer разные
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 23:39

Не по теме:

Что-то оно пахнет говнокодом...



Вы хотите сделать статический мэп (точнее по мэпу на каждый тип), в котором можно искать по имени объект какого-то типа... Ууу...

А тайпдефить вряд ли получится. Шаблоны раскрываются при компиляции, так что какие-нибудь map<int> и map<double> — это совершенно разные типы. Считайте их типами с именами map__int и map__double.

Соответственно, они не могут быть под одним тайпдефом. Максимум вы можете сделать тот костыль, что в восьмом посте. Тогда можно будет писать вместо
std::map<std::string, T>::iterator
такое:
MyMap<T>::iterator
0
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:44  [ТС]
В итоге получается ошибка проектирования?
0
~ Эврика! ~
 Аватар для OhMyGodSoLong
1258 / 1007 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 23:49
Ну никто ж не знает, какие цели вы преследовали. Может вам реально надо было обращаться к объектам по строковым именам по каким-то высшим причинам, тогда это... технически нормально и логично. Но вот реально ли надо по строкам отыскивать объекты? Почему не указатели? Это пользователь что ли будет вводить строки и ему надо выдавать объекты различных типов по этим строкам? (Кстати, как вы тип будете узнавать по строке в таком случаете?)
1
 Аватар для I.M.
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
08.10.2012, 00:01
Цитата Сообщение от vechestva Посмотреть сообщение
В итоге получается ошибка проектирования?
Скорее всего.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.10.2012, 00:01
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru