в проектике под 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;
}
вопрос — как это правильно написать?