Boost logo

Boost :

From: Bernd Martin Wollny (bm.wollny_at_[hidden])
Date: 2008-09-02 04:52:01


Hello,

I Tried to build a function Map. This is working for my. But if I change the function
Parameter to const MSVC 7.1 failed to build. I am using boost 1.35
With gcc 4.3.1 i can compile it.

Have some one a solution for me ?

##### source #####
#include <string>
#include <map>
#include <iostream>
#include <boost/function.hpp>

typedef boost::function<unsigned int (const bool)> measure_func;

class X
{
public:
    X(void);
    unsigned int Exec(const std::string s,const bool b);

protected:
    unsigned int f1(const bool b);
    unsigned int f2(const bool b);
    std::map<const std::string,measure_func> measure_map;
};

X::X(void)
{
    measure_map["1"]=std::bind1st(std::mem_fun(&X::f1), this);
    measure_map["2"]=std::bind1st(std::mem_fun(&X::f2), this);
}

unsigned int X::f1(bool b)
{
    std::cout << "f1: " << b << std::endl;
    return 1;
}

unsigned int X::f2(bool b)
{
    std::cout << "f2: " << b << std::endl;
    return 2;
}

unsigned int X::Exec(const std::string s,const bool b)
{
    measure_func executer = measure_map[s];
    if ( executer )
    {
        return executer(b);
    }
    return 0;
}

// int main(int argc, char* argv[] ) // gcc main
int _tmain(int argc, _TCHAR* argv[]) //VC main
{
    X x;
    unsigned int n=x.Exec("1",true);
    std::cout << n << std::endl;
    return 0;
}

####### MSVC 7.1 output #####

c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\functional(278) : error C2535:
'std::binder1st<_Fn2>::result_type std::binder1st<_Fn2>::operator ()(const
std::binder1st<_Fn2>::argument_type &) const' : member function already defined or declared
        with
        [
            _Fn2=std::mem_fun1_t<unsigned int,X,const bool>
        ]
        c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\functional(272) : see
declaration of 'std::binder1st<_Fn2>::operator`()''
        with
        [
            _Fn2=std::mem_fun1_t<unsigned int,X,const bool>
        ]
        d:\Devel\test\Boost_test\Bind\Bind.cpp(29) : see reference to class template
instantiation 'std::binder1st<_Fn2>' being compiled
        with
        [
            _Fn2=std::mem_fun1_t<unsigned int,X,const bool>
        ]

-- 
Bernd Martin Wollny                        TRIOPTICS GmbH - www.trioptics.com
b.wollny_at_[hidden]                     Hafenstrasse 39, 22880 Wedel/GERMANY
Software Designer                          Geschäftsführer: Dipl.-Ing. Eugen Dumitrescu
phone / fax: +49 (0)4103 18006-26 /-20     Amtsgericht Pinneberg HRB 3215

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk