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

Boost.Lambdaまたは C++ ラムダ (コンパイラがサポートしている場合) のいずれかのラムダを使用できます。

// 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_funですbind1st

于 2010-09-21T12:49:10.727 に答える