в проектике под 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;
}
вопрос — как это правильно написать?
Здравствуйте, 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;
Здравствуйте, 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 >>
Удалено избыточное цитирование. -- ПК.
Здравствуйте, MaximE, Вы писали:
OE>>пытаюсь соорудить тоже самое под VC7.1, STLport для нее нормальный еще не сделали, ладно думаю, в boost вроде все это есть.
ME>В boost'e нет аналогов STLPort'овским select1st/2nd.
OE>>И нифига, ни выходит каменный цветок, ошибок не привожу, смысл такой — ты вообще везде не прав, даже boost\mpl\select2nd.hpp не компилируется.
ME>Ты очень точно уловил смысл
. Этот select2nd<> — это метафунция из библиотеки boost::mpl. Это значит, что она предназначена для работы только на этапе компиляции.
нда, слона-то я и не заметил