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

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

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

Author24 — интернет-сервис помощи студентам
Доброго здоровица.
Как объявить контейнер для хранении различных типов?
Правилен ли такой метод?
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
Эксперт
8794 / 1073 / 104
Регистрация: 17.06.2006
Сообщений: 12,602
Блог
07.10.2012, 21:27
Ответы с готовыми решениями:

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

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

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

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

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

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

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

Добавлено через 15 минут
ну, что скажете?
0
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 21:53 4
Тогда std::tuple (надо С++11) или boost::tuple (надо Boost).
0
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 21:58  [ТС] 5
а если?
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Или "контейнер" и "разные типы" — но с динамическими проверками типов.
0
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 22:03 6
Тогда делаете контейнер из каких-нибудь boost::any или аналогов.
0
-28 / 0 / 1
Регистрация: 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
бжни
2473 / 1684 / 135
Регистрация: 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
2836 / 1645 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
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
-28 / 0 / 1
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:12  [ТС] 10
млин!
Я хочу создать map с разными типами.
И после тайподефайнить его.
Вот вам и вопрос.

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

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

А насколько много разных типов надо туда запихать? может есть смысл использовать union или struct?
0
-28 / 0 / 1
Регистрация: 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
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
07.10.2012, 23:33 14
это какойто ад
насколько вы представляете что делаете?
Цитата Сообщение от vechestva Посмотреть сообщение
я в первом посту спросил, правильный ли метод реализаций:
нет, у вас будут объекты одного типа
0
-28 / 0 / 1
Регистрация: 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
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 23:39 16

Не по теме:

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



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

А тайпдефить вряд ли получится. Шаблоны раскрываются при компиляции, так что какие-нибудь 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  [ТС] 17
В итоге получается ошибка проектирования?
0
~ Эврика! ~
1257 / 1006 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 23:49 18
Ну никто ж не знает, какие цели вы преследовали. Может вам реально надо было обращаться к объектам по строковым именам по каким-то высшим причинам, тогда это... технически нормально и логично. Но вот реально ли надо по строкам отыскивать объекты? Почему не указатели? Это пользователь что ли будет вводить строки и ему надо выдавать объекты различных типов по этим строкам? (Кстати, как вы тип будете узнавать по строке в таком случаете?)
1
576 / 559 / 47
Регистрация: 16.12.2011
Сообщений: 1,389
08.10.2012, 00:01 19
Цитата Сообщение от vechestva Посмотреть сообщение
В итоге получается ошибка проектирования?
Скорее всего.
0
08.10.2012, 00:01
BasicMan
Эксперт
19315 / 2622 / 84
Регистрация: 17.02.2009
Сообщений: 10,364
Блог
08.10.2012, 00:01
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru