【发布时间】:2021-04-16 20:43:57
【问题描述】:
假设我有以下非工作代码(仅用于说明目的):
class fruit
{
public:
std::string apple;
std::string banana;
std::String orange;
};
class grocery
{
public:
std::vector<fruit> g_items;
std::string total_weight;
};
std::vector<grocery> shopping;
auto check_item = [&](std::string f_itm) -> void
{
for (std::size_t i = 0; i < shopping.g_items.size(); ++i)
{
std::cout << shopping.g_items.at(i).f_itm << std::endl;
}
};
check_item(apple);
check_item(banan);
check_item(orange)
我如何调用 lambda 函数 check_item,传递 fruit 对象的特定数据成员,因为它们都具有相同的类型 (std:string)?
谢谢。
【问题讨论】:
-
我猜您希望能够使用指向
fruit(?) 的std::string数据成员的指针调用 lambda 如果是这样,请将 lambda 参数类型更改为std::string (fruit::*f_itm)并将其称为例如check_item(&fruit::apple)。除此之外,我真的不明白这个问题。 -
然后在 lambda 内部,您可以像这样使用
f_itm指针:std::cout << shopping[i].g_items[j].*f_itm << std::endl; -
@G.M.确切地。 Remy 和 Eduardo 已经回答了这个问题。谢谢大家。
标签: c++ lambda pointer-to-member