c – 使用std :: bind时从std :: function获取函数指针

我正在尝试将std :: function与std :: bind结合使用,但我遇到了一些问题.

这有效:

#include <functional>
#include <iostream>

void print() {
    std::cout << 2;
}

int main() {
    std::function<void ()> foo = print;
    (*foo.target<void (*)()>())(); //prints 3
}

这在主要的第二行崩溃:

#include <functional>
#include <iostream>

void print (int i) {
    std::cout << i;
}

int main() {
    std::function<void ()> foo = std::bind (print, 2);
    (*foo.target<void (*)()>())();
}

我真的拿着std :: function< void()>并且需要能够返回该功能;不只是打电话给它.我希望用法是这样的:

#include <functional>
#include <iostream>

void print (int i) {
    std::cout << i;
}

int main() {
    Container c (std::bind (print, 2));

    //I would expect the original
    c.func() (3); //prints 3

    if (c.func() == print) /* this is what I'm mostly getting at */
}

有没有办法让原始函数返回它,或者另类?它与返回类型也有一些冲突,因为void(*)()很好地匹配绑定的签名.

最佳答案
这是不可能的. std :: function存在的全部原因是函数指针可怕地吮吸并且永远不会被任何人使用,除了带有地狱C的燃烧标准互操作的注定灵魂之外,因为它们无法处理状态函数.

一个std :: function< void()>在一般情况下,不能转换为void(*)().这在第一个例子中起作用的唯一原因是因为它最初恰好是一个void(*)().

转载注明原文:c – 使用std :: bind时从std :: function获取函数指针 - 代码日志