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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 21:27     Статический контейнер для разных типов #1
Доброго здоровица.
Как объявить контейнер для хранении различных типов?
Правилен ли такой метод?
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() {}
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 21:31     Статический контейнер для разных типов #2
Эм... Из фраз "контейнер", "статический" и "разные типы" выбираете любые две.

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

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

Добавлено через 15 минут
ну, что скажете?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 21:53     Статический контейнер для разных типов #4
Тогда std::tuple (надо С++11) или boost::tuple (надо Boost).
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 21:58  [ТС]     Статический контейнер для разных типов #5
а если?
Цитата Сообщение от ~OhMyGodSoLong~ Посмотреть сообщение
Или "контейнер" и "разные типы" — но с динамическими проверками типов.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 22:03     Статический контейнер для разных типов #6
Тогда делаете контейнер из каких-нибудь boost::any или аналогов.
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: необъявленный идентификатор
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
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;
правда то ли я неправильно делаю, то ли мой компилятор такого не поддерживает
Somebody
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 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;
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:12  [ТС]     Статический контейнер для разных типов #10
млин!
Я хочу создать map с разными типами.
И после тайподефайнить его.
Вот вам и вопрос.

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

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

А насколько много разных типов надо туда запихать? может есть смысл использовать union или struct?
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()
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
07.10.2012, 23:33     Статический контейнер для разных типов #14
это какойто ад
насколько вы представляете что делаете?
Цитата Сообщение от vechestva Посмотреть сообщение
я в первом посту спросил, правильный ли метод реализаций:
нет, у вас будут объекты одного типа
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 разные
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 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
vechestva
-28 / 0 / 0
Регистрация: 14.09.2012
Сообщений: 47
07.10.2012, 23:44  [ТС]     Статический контейнер для разных типов #17
В итоге получается ошибка проектирования?
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
07.10.2012, 23:49     Статический контейнер для разных типов #18
Ну никто ж не знает, какие цели вы преследовали. Может вам реально надо было обращаться к объектам по строковым именам по каким-то высшим причинам, тогда это... технически нормально и логично. Но вот реально ли надо по строкам отыскивать объекты? Почему не указатели? Это пользователь что ли будет вводить строки и ему надо выдавать объекты различных типов по этим строкам? (Кстати, как вы тип будете узнавать по строке в таком случаете?)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2012, 00:01     Статический контейнер для разных типов
Еще ссылки по теме:

C++ Функция swap перестановки значений двух переменных для данных разных типов. Используйте template
Создать универсальный вектор для разных типов класса C++
Используя механизм перегрузки функции, вычислить для разных типов параметров C++

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

Или воспользуйтесь поиском по форуму:
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
08.10.2012, 00:01     Статический контейнер для разных типов #19
Цитата Сообщение от vechestva Посмотреть сообщение
В итоге получается ошибка проектирования?
Скорее всего.
Yandex
Объявления
08.10.2012, 00:01     Статический контейнер для разных типов
Ответ Создать тему
Опции темы

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