繁体   English   中英

如何制作引用局部变量的函数指针?

[英]How can I make a function pointer that references a local variable?

我试图使用第一个列表的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

仅当Lambda不捕获任何内容时,它们才能衰减为函数指针。 考虑以下代码段:

#include <iostream>

void run(int(*f)())
{
    std::cout << f();
}

struct S {
    static int something;
    static int nothing()
    {
        return something;
    }
};
int S::something = 0;

int main()
{
    auto simpleLambda = [](){ return 1; };
    run(simpleLambda);

    // auto capturingLambda = [&](){ return 1; };
    // run(capturingLambda);

    S::something = 2;
    run(S::nothing);
}

带注释的部分将不会编译,因为capturingLambda具有非空的捕获列表。 您可以使用我在代码中放入的解决方法,或者更好地使您的forEach函数像所有STL算法一样,以forEach函数为模板。

暂无
暂无

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

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