2

我想使用 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())使用当前语法调用?

4

4 回答 4

8
std::for_each(categories.begin(), categories.end(), boost::bind(&CComboBox::AddString, &comboBox, boost::bind(&Category::GetName, _1)));
于 2010-09-21T12:34:38.237 回答
4

您可以使用 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());});
于 2010-09-21T12:41:25.693 回答
3

我知道你问过关于使用 std::for_each 的问题,但在这些情况下,我喜欢使用 BOOST_FOREACH,它使代码更具可读性(在我看来)并且更易于调试:

const std::vector<Category> &categories = /**/;
BOOST_FOREACH(const Category& category, categories)
    comboBox.AddString(category.GetName());
于 2010-09-21T13:35:53.630 回答
0

实现这一目标的一种可能方法是使用mem_funbind1st

于 2010-09-21T12:49:10.727 回答