Хотелка по C++0x lambda
От: ArtDenis Россия  
Дата: 04.05.10 07:22
Оценка:
Лямбда из C++0x упростила жизнь для тех, кто постоянно использует алгоритмы, принимающие на вход функтор (который приходилось вытаскивать в виде отдельного класса или функции). Но часть проблем остались нерешёнными. Например, есть задача хранить в std::set не объекты, а указатели на них.
Как я делал это раньше:

struct Item
{
    ...
};

struct ItemPtrComparer
{
    bool operator() (const Item *item1, const Item *item2) const
    {
        ...
        // тут сравнивались данные объектов на которые указывают item1 и item2
    }
};


std::set<Item*, ItemPtrComparer> set_of_items;


Хотелось бы получить от новой лямбды возможность обойтись без создания класса ItemPtrComparer:


struct Item
{
    ...
};

std::set<
    Item*, 
    decltype([] (const Item *item1, const Item *item2) { /* Переносим сравнение сюда */;}) // Как-то так
> set_of_items;

насколько такое реально сейчас или в будущем?
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
{
Re: Хотелка по C++0x lambda
От: remark Россия http://www.1024cores.net/
Дата: 04.05.10 07:38
Оценка: 12 (4)
Здравствуйте, ArtDenis, Вы писали:

AD>насколько такое реально сейчас или в будущем?

    auto comp = [](int* x1, int* x2){return *x1 > *x2;};
    std::set<int*, decltype(comp)> set (comp);
    set.insert(new int (10));
    set.insert(new int (15));
    set.insert(new int (5));



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[2]: Хотелка по C++0x lambda
От: ArtDenis Россия  
Дата: 04.05.10 07:44
Оценка:
Здравствуйте, remark, Вы писали:
R>
R>    auto comp = [](int* x1, int* x2){return *x1 > *x2;};
R>    std::set<int*, decltype(comp)> set (comp);
R>    set.insert(new int (10));
R>    set.insert(new int (15));
R>    set.insert(new int (5));
R>


Я некоторое время назад всякие варианты перебирал. Этот мне тогда пришёл в голову один из первых Но к сожалению, он не прокатил (по крайней мере на VC2010)
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[3]: Хотелка по C++0x lambda
От: ArtDenis Россия  
Дата: 04.05.10 07:48
Оценка:
Здравствуйте, ArtDenis, Вы писали:

AD>Я некоторое время назад всякие варианты перебирал. Этот мне тогда пришёл в голову один из первых Но к сожалению, он не прокатил (по крайней мере на VC2010)


Всё, дошло. Я тогда забыл comp передать в конструктор
Работает, спасибо!
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
Re[4]: Хотелка по C++0x lambda
От: Trapper  
Дата: 04.05.10 10:17
Оценка:
Здравствуйте, ArtDenis, Вы писали:

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


А ещё есть boost.ptr containers
Trapper
Re[5]: Хотелка по C++0x lambda
От: ArtDenis Россия  
Дата: 04.05.10 10:25
Оценка:
Здравствуйте, Trapper, Вы писали:

T>А ещё есть boost.ptr containers


Хранение указателя в контейнере было использовано лишь для того, чтобы продемонстрировать проблему
[ 🎯 Дартс-лига Уфы | 🌙 Программа для сложения астрофото ]
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.