boost: compose, select2nd и т.д. и т.п.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.08.03 05:41
Оценка:
в проектике под VC7.0 + STLport нормально компилировался и работал такой код:

typedef map<EMODULETYPES, CExtModule> EXTMODULES;
EXTMODULES ExtModules;

for_each( ExtModules.begin(),
          ExtModules.end(),
          compose1( boost::mem_fn( &CExtModule::ShowNow ),
                    select2nd<EXTMODULES::value_type>() ) );


пытаюсь соорудить тоже самое под VC7.1, STLport для нее нормальный еще не сделали, ладно думаю, в boost вроде все это есть.
И нифига, ни выходит каменный цветок, ошибок не привожу, смысл такой — ты вообще везде не прав, даже boost\mpl\select2nd.hpp не компилируется. Собственно все до чего додумался — ниже:

#include <map>
#include <algorithm>
#include <functional>
#include <boost\mem_fn.hpp>
#include <boost\compose.hpp>
#include <boost\mpl\select2nd.hpp>

using namespace std;
using namespace boost;

class CExtModule
{
public:
    void ShowNow() { return; }
};

enum EMODULETYPES
{
    TYPE1,
    TYPE2
};

typedef map<EMODULETYPES, CExtModule> EXTMODULES;

EXTMODULES ExtModules;

int _tmain(int argc, _TCHAR* argv[])
{
    for_each( ExtModules.begin(),
              ExtModules.end(),
          compose_f_gx( mem_fn( &CExtModule::ShowNow ),
          mpl::select2nd<EXTMODULES::value_type>() ) );

    return 0;
}


вопрос — как это правильно написать?
Re: boost: compose, select2nd и т.д. и т.п.
От: MaximE Великобритания  
Дата: 05.08.03 07:49
Оценка: 12 (1)
Здравствуйте, Odi$$ey, Вы писали:

OE>пытаюсь соорудить тоже самое под VC7.1, STLport для нее нормальный еще не сделали, ладно думаю, в boost вроде все это есть.


В boost'e нет аналогов STLPort'овским select1st/2nd.

OE>И нифига, ни выходит каменный цветок, ошибок не привожу, смысл такой — ты вообще везде не прав, даже boost\mpl\select2nd.hpp не компилируется.


Ты очень точно уловил смысл . Этот select2nd<> — это метафунция из библиотеки boost::mpl. Это значит, что она предназначена для работы только на этапе компиляции.

Пример:

struct my_pair
{
    typedef int first;
    typedef char second;
};

// метафункция
template<class pair>
struct select1st
{
    typedef typename pair::first type;
};

// используем метафункцию select1st<>
typedef select1st<my_pair>::type my_first;
Re: boost: compose, select2nd ? ?.?. ? ?.?.
От: Yacha Россия  
Дата: 05.08.03 07:57
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

O$>
O$>typedef map<EMODULETYPES, CExtModule> EXTMODULES;
O$>EXTMODULES ExtModules;

O$>for_each( ExtModules.begin(),
O$>          ExtModules.end(),
O$>          compose1( boost::mem_fn( &CExtModule::ShowNow ),
O$>                    select2nd<EXTMODULES::value_type>() ) );
O$>


O$>пытаюсь соорудить тоже самое под VC7.1, STLport для нее нормальный еще не сделали, ладно думаю, в boost вроде все это есть.
O$>И нифига, ни выходит каменный цветок, ошибок не привожу, смысл такой — ты вообще везде не прав, даже boost\mpl\select2nd.hpp не компилируется. Собственно все до чего додумался — ниже: <...>
O$>вопрос — как это правильно написать?

На сколько мне известно в стандарте и в boost-е отсутствуют нужные тебе функторы.
Но их просто можно реализовать самому. Скорее всего из-за этого их и не включили в стандарт.
... << RSDN@Home 1.0 beta 6a >>

Удалено избыточное цитирование. -- ПК.
Re[2]: boost: compose, select2nd и т.д. и т.п.
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.08.03 07:57
Оценка:
Здравствуйте, MaximE, Вы писали:

OE>>пытаюсь соорудить тоже самое под VC7.1, STLport для нее нормальный еще не сделали, ладно думаю, в boost вроде все это есть.

ME>В boost'e нет аналогов STLPort'овским select1st/2nd.



OE>>И нифига, ни выходит каменный цветок, ошибок не привожу, смысл такой — ты вообще везде не прав, даже boost\mpl\select2nd.hpp не компилируется.


ME>Ты очень точно уловил смысл . Этот select2nd<> — это метафунция из библиотеки boost::mpl. Это значит, что она предназначена для работы только на этапе компиляции.


нда, слона-то я и не заметил
Re: boost: compose, select2nd и т.д. и т.п.
От: Юнусов Булат Россия  
Дата: 05.08.03 09:50
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

Вот еще способ
http://www.rsdn.ru/Forum/?mid=303443
Автор: Юнусов Булат
Дата: 22.06.03
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.