Boost signals2 connect() call fails to compile if slot object contains mutex & condition variable
编译器:MSVS 2008
提升:1.49
码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #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),则在
错误C2679:二进制'=':找不到哪个运算符采用'const SigUser'类型的右手操作数(或者没有可接受的转换)
我不知道为什么
如果我定义FAIL2(没有定义FAIL1),则在指定的行发生编译器错误:
错误C2248:'boost :: mutex :: mutex':无法访问类'boost :: mutex'中声明的私有成员
我不知道私人会员正在尝试访问什么。
任何人都可以给我一个线索吗? 最好是一条线索,允许我定义FAIL1和FAIL2并获得成功的编译。