[英]How to call a member function on a parameter with std::for_each and boost::bind?
我想使用std :: for_each将一系列字符串添加到组合框中。 对象的类型为Category
,我需要在它们上调用GetName
。 我怎么能用boost::bind
实现这个目的?
const std::vector<Category> &categories = /**/;
std::for_each(categories.begin(), categories.end(), boost::bind(&CComboBox::AddString, &comboBox, _1);
当前代码失败,因为它试图调用CComboBox::AddString(category)
。 这显然是错的。 如何使用当前语法调用CComboBox::AddString(category.GetName())
?
std::for_each(categories.begin(), categories.end(), boost::bind(&CComboBox::AddString, &comboBox, boost::bind(&Category::GetName, _1)));
您可以使用lambdas, Boost.Lambda或C ++ lambdas(如果您的编译器支持它们):
// C++ lambda
const std::vector<Category> &categories = /**/;
std::for_each(categories.begin(), categories.end(),
[&comboBox](const Category &c) {comboBox.AddString(c.GetName());});
我知道你问过使用std :: for_each,但是在那些情况下我喜欢使用BOOST_FOREACH,它使代码更具可读性(在我看来)并且更容易调试:
const std::vector<Category> &categories = /**/;
BOOST_FOREACH(const Category& category, categories)
comboBox.AddString(category.GetName());
实现这一目标的一种可能方法是使用mem_fun
和bind1st
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.