map tag --> T
От: Аноним  
Дата: 16.01.09 10:48
Оценка:
Хочу что-то такое:


struct tag1 {};

T t = myMap.get<tag1>();

struct tag2 {};

myMap.put<tag2>(someValue);


Есть реализации?
Re: map tag --> T
От: quodum  
Дата: 16.01.09 15:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Есть реализации?


Всего-то делов:

template<typename T, typename TagT>
T& TagValue()
{
    static T value;
    return value;
}

................
// используем:

struct tag1 {};
struct tag2 {};

int x = TagValue<int, tag1>();
TagValue<int, tag2> = 42;


Можно ещё обернуть это дело по вкусу, для приведения интерфейса к желаемому виду.
Минус -- T должен быть default constructible, но при необходимости можно и это обойти.
Re[2]: map tag --> T
От: Аноним  
Дата: 16.01.09 15:50
Оценка:
Здравствуйте, quodum, Вы писали:

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


А>> Есть реализации?


Q>Всего-то делов:


Q>
Q>template<typename T, typename TagT>
Q>T& TagValue()
Q>{
Q>    static T value;
Q>    return value;
Q>}

Q>................
Q>// используем:

Q>struct tag1 {};
Q>struct tag2 {};

Q>int x = TagValue<int, tag1>();
Q>TagValue<int, tag2> = 42;
Q>


Q>Можно ещё обернуть это дело по вкусу, для приведения интерфейса к желаемому виду.

Q>Минус -- T должен быть default constructible, но при необходимости можно и это обойти.

Не подходит. Контейнер динамический. Расширяется новыми тэгами по всей программе.
Re[3]: map tag --> T
От: Erop Россия  
Дата: 16.01.09 16:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Не подходит. Контейнер динамический. Расширяется новыми тэгами по всей программе.


Насколько я тебя понял, тэги -- это типы. И как же они могут возникать в программе динамически?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: map tag --> T
От: Аноним  
Дата: 17.01.09 11:47
Оценка:
Здравствуйте, Erop, Вы писали:

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


А>>Не подходит. Контейнер динамический. Расширяется новыми тэгами по всей программе.


E>Насколько я тебя понял, тэги -- это типы. И как же они могут возникать в программе динамически?


Они не возникают динамически.
Короче говоря, мне нужен некий map<?, boost::any> чтобы в качестве ключа я указывал простейшую конструкцию и она гарантированно не совпадала с другими ключами. Желательно, с константным временем доступа.
Re[5]: map tag --> T
От: johny5 Новая Зеландия
Дата: 19.01.09 06:48
Оценка: +1
А>Они не возникают динамически.
А>Короче говоря, мне нужен некий map<?, boost::any> чтобы в качестве ключа я указывал простейшую конструкцию и она гарантированно не совпадала с другими ключами. Желательно, с константным временем доступа.

typeid(?) ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.