gpt4 book ai didi

c++ - 如果插槽对象包含互斥锁和条件变量,则 Boost signals2 connect() 调用无法编译

转载 作者:行者123 更新时间:2023-11-28 03:32:26 25 4
gpt4 key购买 nike

编译器:MSVS 2008

boost :1.49

代码:

#include <boost/signals2.hpp>
#include <boost/thread.hpp>

class SigOwner
{
public:
typedef boost::signals2::signal<void (int)> OSig;
OSig _signal;

void doConnect(OSig::slot_type slot) { _signal.connect(slot); }
};

class SigUser
{
public:
#if defined(FAIL2)
boost::mutex sync;
#endif
#if defined(FAIL1)
boost::condition_variable evSig;
#endif

void setup(SigOwner &so)
{
so.doConnect(*this); // failure 1 traces back to this line
}

void operator()(int value) // signature to make SigUser a slot
{
}
}; // failure 2 flags on this line

如前所述,编译成功。

如果我定义了 FAIL1(有或没有 FAIL2),编译器错误发生在 signals2/slot_template.hpp 中: error C2679: binary '=': 找不到接受类型为 'const SigUser' 的右手操作数的运算符(或者没有可接受的转换)

我不知道为什么 *this 被认为是常量。

如果我定义了 FAIL2(没有定义 FAIL1),编译器错误发生在指示的行:错误 C2248:“boost::mutex::mutex”:无法访问类“boost::mutex”中声明的私有(private)成员

我不知道什么私有(private)成员正试图被访问。

谁能给我一个线索?最好是允许我定义 FAIL1 和 FAIL2 并获得成功编译的线索。

最佳答案

mutexcondition_variable 都不可复制,因此您的 SigUser 不可复制,因此您不能将其传递给 doConnect这样。解决此问题的一种方法是将 syncevSig 定义为(智能)指针。

关于c++ - 如果插槽对象包含互斥锁和条件变量,则 Boost signals2 connect() 调用无法编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12118271/

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