gpt4 book ai didi

android - boost 信号 : Connect fails

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:25:29 27 4
gpt4 key购买 nike

我在 C++ 类(我们称它为 classA)中有一个公共(public)方法,它定义为:

void someFunction(someOtherCppClassB* arg);

此“someFunction”方法执行以下操作:

theConnection = registerFunction(aPtrToAnInstanceOfCStruct1, boost::bind(&classA::callbackFunction, this, _1));

其中 'theConnection' 是 ClassA 中的私有(private)成员变量,类型为 boost::signals2::connection

其中“callbackFunction”是 classA 中的私有(private)方法,定义为:

int callbackFunction(cStruct2** doublePtr);

其中“aPtrToAnInstanceOfCStruct1”是指向此 C 结构实例的指针:

typedef struct cStruct1T
{
boost::signals2::signal<int (cStruct2**)> signalVariable;
} cStruct1

cStruct2 定义为:

typedef struct cStruct2T
{
/* Variables in this struct */
char someDummyVariable;
} cStruct2

“registerFunction”定义为:

boost::signals2::connection registerFunction(cStruct1* aPtrToAnInstanceOfCStruct1, boost::function<int (cStruct2**)> someCallbackFunction)
{
/* THIS FAILS FOR SOME REASON */
return aPtrToAnInstanceOfCStruct1->signalVariable.connect(someCallbackFunction);

}

出于某种原因,.connect() 在 Android 4.3 上生成以下内容:

F/libc (8556):致命信号 11 (SIGSEGV) 位于 0x0000000c(代码=1),线程 8556

我不知道是什么导致了错误。所以我希望有一位 Boost 专家可以看看上面的代码并告诉我我做错了什么。

谢谢。

最佳答案

很抱歉,我发现您的例子很难效仿。但是由于它编译,我怀疑你可能有一个空指针,根据错误代码判断。

我建议将信号代码封装在包含信号的类中,并提供一个函数来连接您的 slot 例如:

typedef struct cStruct1T
{
typedef boost::signals2::signal<int (cStruct2**)> SignalTypeName;
SignalTypeName signalVariable;

void connectSlot(const SignalTypeName::slot_type& slot)
{ signalVariable.connect(slot); }

} cStruct1;

然后您可以像这样在 someFunction 中注册您的插槽:

aPtrToAnInstanceOfCStruct1->connectSlot(boost::bind(&classA::callbackFunction, this, _1));

关于android - boost 信号 : Connect fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19994849/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com