Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

Could anybody point me, please, what the difference is between making functor of set::insert and set::count in the below fragment?

typedef std::set<std::string> s_type;
typedef std::pair<s_type::iterator, bool>(s_type::*insert_fp)(const s_type::value_type&);
typedef s_type::size_type(s_type::*count_fp)(const s_type::value_type&);

std::vector<std::string> s_vector;
std::set<std::string> s_set;

std::for_each(s_vector.begin(), s_vector.end(), boost::bind(static_cast<insert_fp>(&s_type::insert), &s_set, _1));
std::for_each(s_vector.begin(), s_vector.end(), boost::bind(static_cast<count_fp>(&s_type::count), &s_set, _1));

Gives:

error C2440: 'static_cast' : cannot convert from 'overloaded-function' to 'count_fp'
    None of the functions with this name in scope match the target type
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
265 views
Welcome To Ask or Share your Answers For Others

1 Answer

I don't know what you're trying to do but the following works for me without casts:

int main()
{
    std::vector<std::string> vector;
    std::set<std::string> set;

    std::for_each(vector.begin(), s_vector.end(), 
                  boost::bind(&std::set<std::string>::insert, &set, _1));
    std::for_each(vector.begin(), s_vector.end(),   
                  boost::bind(&std::set<std::string>::count, set, _1));   

    return 0;
}

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...