当前位置: 首页 > 知识库问答 >
问题:

Boost::将引用绑定到实例的函数引用

公羊绪
2023-03-14

我想使用Linux内核信号将事件的发生从模块异步传达到用户空间应用程序。我在C中以以下方式工作:

void rcv_signal(int n, siginfo_t *info, void *unused)
{
   // Do something interesting with the signal
}

// Register for updates from the kernel
int main(int argc, char *argv[])
{
    struct sigaction sig;
    sig.sa_sigaction = rcv_signal; // Function pointer
    sig.sa_flags = SA_SIGINFO;
    sigaction(SOME_CUSTOM_SIGNAL, &sig, NULL);

    // Code to wait() then return
}

现在,我想转到C实现。更具体地说,我想使用助推::function/助推::bind将sa_sigaction绑定到一个方法InputCapture::接收。但是,我很难获得正确的函数签名。

下面是InputCapture类的定义:

class InputCapture
{
    public: InputCapture(uint8_t intimer) : timer(_timer) {}
    public: ~InputCapture() {}
    private: void receive(int n, siginfo_t *info, void *unused) {}
    private: uint8_t timer;
};

这是修改后的sa_sigaction:

// Register for updates from the kernel
struct sigaction sig;
sig.sa_sigaction = boost::function<void (int n, siginfo_t *info, void *unused)> (
    boost::bind(&InputCapture::receive, this, _1));
sig.sa_flags = SA_SIGINFO;
sigaction(SOME_CUSTOM_SIGNAL, &sig, NULL);

但是,我收到以下编译错误:

在/home/asymingt/export/rootfs/usr/include/boost/bind中包含的文件中。hpp:22:0,来自/home/asymingt/Worpace/Source/roseline/timesync/src/stamp/LogicalStamp。hpp:12,来自/home/asymingt/Workspace/Source/roseline/timesync/src/stamp/InputCapture。hpp:4,来自/home/asymingt/Workspace/Source/roseline/timesync/src/stamp/InputCapture。cpp:1:/home/asymingt/export/rootfs/usr/include/boost/bind/bind。hpp:在实例化“struct boost::_bi::result_traits”:/home/asymingt/export/rootfs/usr/include/boost/bind/bind_template时。hpp:15:48:需要来自“class boost::_bi::bind_t)(int,siginfo,void*),boost:,_bi:,list2,boost::arg”

我试图实现的目标可能吗?如果可能,我哪里做错了?

共有1个答案

凌景辉
2023-03-14

你不能这样做。

请注意,sigaction::sa_sigaction是指向函数的指针。boost::function,以及boost::bind

 类似资料:
  • 问题内容: 我试图将库包含在我的项目中,并且一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu 12.10上,尝试手动读取站点上的说明来安装库,但是在头文件以及使用前需要构建的库中出现错误。 然后,我通过terminalby安装了库。此后,在我的代码块程序中,可以包含类似的标题,但是当我尝试包含Filesystem库的标题( )时,出现以下错误: 我不确定如何解决此错误(特别

  • 我正试图将库包括在我的项目中,并一直面临着同样的问题。我在使用Codeblocks IDE的Ubuntu12.10上,尝试手动安装库,阅读网站上的说明,但在使用库之前,得到了带有标题的错误以及要构建的错误。 然后,我通过terminalby

  • 本文向大家介绍PHP函数引用返回的实例详解,包括了PHP函数引用返回的实例详解的使用技巧和注意事项,需要的朋友参考一下 引用返回 手册里是这么写的:引用返回用在当想用函数找到引用应该被绑定在哪一个变量上面时。不要用返回引用来增加性能,引擎足够聪明来自己进行优化。仅在有合理的技术原因时才返回引用!要返回引用 当你想将函数的返回引用绑定到某个变量时,PHP允许你这么做: 可见,想让函数返回引用,必须在

  • 本文向大家介绍jQuery中$.each()函数的用法引申实例,包括了jQuery中$.each()函数的用法引申实例的使用技巧和注意事项,需要的朋友参考一下 语法: 值得一提的是,forEach 可以很方便的遍历数组和 NodeList ,jQuery 中的 jQuery 对象本身已经部署了这类遍历方法,而在原生 JavaScript 中则可以使用 forEach 方法,但是 IE 并不支持,因

  • 问题内容: 我正在使用Linux,并且具有以下文件: 该函数在中声明和定义。我需要在中使用该函数,因此我将该函数声明为 在。 但是,在编译过程中,我得到了错误 怎么了? 谢谢。 预计到达时间:多亏了我收到的答案,我现在有了以下内容: 在fileA.h中,我有 在fileA.c中,我有 在fileB.h中,我有 在fileB.cpp中,我有 但是,我现在有错误 问题答案: 如果您确实是使用C而不是C

  • ==最终更新== http://plnkr.co/edit/WKRBB7?p=preview 因为我在表单中使用ngModel,所以我必须添加attribue。 我的错误是,我使用了与它的名称相同的值。 当我换到下面,我的问题就解决了。 ========== 对不起,我不记得为什么使用名称[$index]。名称而不是x。名字。 也许几年前,我在使用x.Name时遇到了一些错误,然后养成了使用索引的