Гетерогенный контейнер
От: Аноним  
Дата: 11.09.02 11:41
Оценка:
Есть вопрос:
можно сделать вот так vector<int>,
или так
class A;
vector<A>

А как сделать вот так:
пусть есть шаблон:
template <class T> class CParam {
public:
T value;
};

и хочется получить массив типа vector<CParam>.

Вопрос: а как такое можно получить?
Re: Гетерогенный контейнер
От: Андрей Россия  
Дата: 11.09.02 11:46
Оценка:
Здравствуйте Аноним, Вы писали:

skip

А>Вопрос: а как такое можно получить?


vector<CParam<int> >, vector<CParam<double> > и т.д
Re[2]: Гетерогенный контейнер
От: Аноним  
Дата: 11.09.02 15:54
Оценка:
Здравствуйте Андрей, Вы писали:

А>>Вопрос: а как такое можно получить?


А>vector<CParam<int> >, vector<CParam<double> > и т.д

Ну этот вариант понятен и так, но это не то то надо:

CParam<string> tmp1;
CParam<int> tmp2

vector<Cparam> v1
v1.push_back(tmp1);
v1.push_back(tmp2);

Т.е. я хочу добавлять в один контейнер переменные разных типов.
Re[3]: Гетерогенный контейнер
От: Bell Россия  
Дата: 11.09.02 16:10
Оценка:
Здравствуйте Аноним, Вы писали:

А>Здравствуйте Андрей, Вы писали:


А>>>Вопрос: а как такое можно получить?


А>>vector<CParam<int> >, vector<CParam<double> > и т.д

А>Ну этот вариант понятен и так, но это не то то надо:

А>CParam<string> tmp1;

А>CParam<int> tmp2

А>vector<Cparam> v1

А>v1.push_back(tmp1);
А>v1.push_back(tmp2);

А>Т.е. я хочу добавлять в один контейнер переменные разных типов.


так не выйдет.
Можно попытаться породить все параметры от одного базового класса, и складывать в контейнер указатели на этот базовый класс.
Очевидный минус — надо заранее создатиь свой класс для каждого типа. Да и в дальнейшем при работе с такими параметрами придется определять конкретный тип с помощью rtti.
Любите книгу — источник знаний (с) М.Горький
Re[3]: Гетерогенный контейнер
От: Nemo  
Дата: 11.09.02 16:13
Оценка:
Здравствуйте Аноним, Вы писали:


А>CParam<string> tmp1;

А>CParam<int> tmp2

А>vector<Cparam> v1

А>v1.push_back(tmp1);
А>v1.push_back(tmp2);

А>Т.е. я хочу добавлять в один контейнер переменные разных типов.


А на что будет указывать итератор в таком контейнере? на CParam<string> или на CParam<int> ??? и какой будет allocator ??? Срочно читать Страуструпа, часть II

ps
иль бросайся с мОста в реку, иль беги в библиотеку. (c) С.Маршак.
Re[3]: Гетерогенный контейнер
От: Павел Кузнецов  
Дата: 11.09.02 16:15
Оценка:
Здравствуйте, Вы писали:

>CParam<string> tmp1;

>CParam<int> tmp2

>vector<Cparam> v1

>v1.push_back(tmp1);
>v1.push_back(tmp2);

>Т.е. я хочу добавлять в один контейнер переменные разных типов.


А как ты планируешь потом работать с элементами этого контейнера?
<< J 1.0 alpha 4 >>
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[4]: Гетерогенный контейнер
От: Аноним  
Дата: 11.09.02 17:42
Оценка:
Здравствуйте Nemo, Вы писали:

>

А>>CParam<string> tmp1;
А>>CParam<int> tmp2

А>>vector<Cparam> v1

А>>v1.push_back(tmp1);
А>>v1.push_back(tmp2);

А>>Т.е. я хочу добавлять в один контейнер переменные разных типов.


N>А на что будет указывать итератор в таком контейнере? на CParam<string> или на CParam<int> ??? и какой будет allocator ??? Срочно читать Страуструпа, часть II

На что он будет указывать — это науке неизвестно
Вопрос был задан исходя из того что была такая бибилиотека — BIDS (от Borland), так там таките
фокусы были возможны. Могу дать ссылку даже на книгу где это описывалось, но там был маааленький
пунктик -все объекты были порождены от общего предка, а в сам контейнер клались не сами объекты
а указатели на них. Давльнейший механизм думаю понятен.
Предложение Bell как раз в этом ключе.
Вот если бы был механизм "обобщенных указателей" — не знаю даже как назвать.
Указатель на шаблон...

В общем резюме — хотелось красиво, а получится как всегда
Re[3]: Гетерогенный контейнер
От: MaximE Великобритания  
Дата: 11.09.02 20:31
Оценка: 5 (1)
Здравствуйте Аноним, Вы писали:

А>Здравствуйте Андрей, Вы писали:


А>>>Вопрос: а как такое можно получить?


А>>vector<CParam<int> >, vector<CParam<double> > и т.д

А>Ну этот вариант понятен и так, но это не то то надо:

А>CParam<string> tmp1;

А>CParam<int> tmp2

А>vector<Cparam> v1

А>v1.push_back(tmp1);
А>v1.push_back(tmp2);

А>Т.е. я хочу добавлять в один контейнер переменные разных типов.


ну делай тогда так

vector< _variant_t > v;

v.push_back( TEXT("element 1") );
v.push_back( 123 );
v.push_back( true );
v.push_back( 3.14 );
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.