【发布时间】:2015-10-12 23:30:04
【问题描述】:
我正在尝试使用第一个列表的 forEach 方法将一个列表中的所有项目添加到另一个列表中,该方法接受一个函数指针并在每个元素上调用该函数,但是我无法创建一个可以调用的函数指针第二个列表的成员函数。我尝试过使用 lambda:
LinearLinkedList<bar> test;
//<add items to test>
LinearLinkedList<bar> sorted;
auto addToSorted = [&](bar * b) { sorted.addSorted(b, &barLessThan); };
test.forEach(&addToSorted);
并使用内部struct:
LinearLinkedList<bar> test;
//<add items to test>
LinearLinkedList<bar> sorted;
struct Sorter {
static LinearLinkedList<bar> * list = &sorted;
static void addToSorted(bar * b) { list->addSorted(b, &barLessThan); }
};
test.forEach(&Sorter::addToSorted);
但两者都被编译器拒绝,因为它们以非法方式引用 sorted。如何在调用forEach 时引用sorted?
【问题讨论】:
-
您遇到了哪些编译器错误?这一切都在函数的上下文中吗?
-
@aschepler 是的,这是在函数内部。
标签: c++ lambda closures function-pointers