简体   繁体   中英

map of string and functions using boost gives compilation error

I am trying to implement map of string and functions I have put snippet of my program.

I have following implementation

void foo1(const std::string)
void foo2(const std::string)
void foo3(const std::string)

typedef boost::function<void, const std::string> fun_t;
typedef std::map<std::string, fun_t> funs_t;
funs_t f;

f["xyz"] = &foo1;
f["abc"] = &foo2;
f["pqr"] = &foo3;

std::vector<std::future<void>> tasks;

for(std::string s: {"xyz", "abc", "pqr"}){

 tasks.push_back(std::async(std::launch::async, f.find(f_kb)->second, s));

}

for(auto& task : tasks){
    task.get();
}

it gives me error on line

f["xyz"] = &foo1; 

that required from here

usr/local/include/boost/function/function_template.hpp225:18: error: no match for call to '(boost::_mfi::mf1<void, Class sample, std::basic_string<char>>)(const std::basic_string<char> &)'

BOOST_FUNCTION_RETURN(boost::mem_fn(*f)(BOOST_FUNCTION_ARGS));

Can anybody please tell me what is wrong with code?

I think the comment on function<> is the correct one.

Here's your sample fixed up to work:

Live On Coliru

#include <boost/function.hpp>
#include <future>
#include <map>
#include <iostream>

void foo1(std::string const& s) { std::cout << __PRETTY_FUNCTION__ << "(" << s << ")\n"; }
void foo2(std::string const& s) { std::cout << __PRETTY_FUNCTION__ << "(" << s << ")\n"; }
void foo3(std::string const& s) { std::cout << __PRETTY_FUNCTION__ << "(" << s << ")\n"; }

typedef boost::function<void(std::string const&)> fun_t;
typedef std::map<std::string, fun_t> funs_t;

int main() {
    funs_t f;

    f["xyz"] = &foo1;
    f["abc"] = &foo2;
    f["pqr"] = &foo3;

    std::vector<std::future<void>> tasks;

    for(std::string s: {"xyz", "abc", "pqr"}){

        tasks.push_back(std::async(std::launch::async, f.find(s)->second, s));

    }

    for(auto& task : tasks){
        task.get();
    }
}

Prints something like:

void foo3(const string&)(pqr)
void foo2(const string&)(abc)
void foo1(const string&)(xyz)

(output varies depending on thread scheduling, which is implementation defined and non-deterministic)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM