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;
}


вопрос — как это правильно написать?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.