繁体   English   中英

如何使用std :: for_each和boost :: bind调用参数的成员函数?

[英]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_funbind1st

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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