标签: boost-signals

Boost ::信号存储器访问错误

我正在尝试使用boost :: signal来实现一个回调机制,即使是最简单的库使用,我也会在boost :: signal代码中获得内存访问断言.我把它简化为这段代码:

#include <boost/signal.hpp>

typedef boost::signal<void (void)> Event;

int main(int argc, char* argv[])
{

    Event e;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:这是使用Visual Studio 2008 w/SP1编译的Boost 1.36.0.Boost :: filesystem,像boost :: signal也有一个必须链接的库,它似乎工作正常.我相信,我使用的所有其他boost库都只是标题.

c++ boost-signals

4
推荐指数
1
解决办法
1408
查看次数

Boost :: Signals有什么意义?

首先,我是编程的绝对初学者,所以不要嘲笑我太多.
我见过的唯一信号是GUI工具包,GUI工具包都带有自己的信号.那么,Boost:信号甚至可以与这些GUI工具包一起使用吗?这是个好主意吗?信号有哪些其他应用?

c++ boost signals boost-signals boost-signals2

4
推荐指数
1
解决办法
1304
查看次数

如何制作可复制的boost :: signal?

我知道为什么boost::signal是不可复制(这是因为复制的信号没有明确的含义),但我需要的是一个版本,它提供了一些分类复制构造函数的(或者无操作或一个副本的所有连接).

我需要这个的原因是因为在我的项目中,许多对象只是凭借特征信号变得不可复制,并且用舒适的价值语义对待它们(shared_ptrs 那么舒服)我需要手动提供拷贝,违反DRY.显然,一种准可复制的信号对于C++的丑陋来说是一个很好的解决方法.

想到的第一个解决方案是继承signal并在派生类中提供复制ctor,但这是禁止的,因为信号没有虚拟dtor.

思考?

c++ noncopyable boost-signals

3
推荐指数
1
解决办法
2515
查看次数

将boost :: signal作为boost :: function传递

我有一个带有信号成员的类,用boost :: function封装.

是否可以使用此API添加另一个信号作为处理程序?

class Foo
{
public:
  VOID AddHandler(boost::function<VOID()> handler)
  {
     m_signal.connect(handler);
  }

private:
  boost::signal<VOID()> m_signal;
};

boost::signal<VOID()> signal;

VOID SignalCaller()
{
    signal();
}

int main( )
{ 
   Foo foo;
   //foo.AddHandler(signal); // I want to
   foo.AddHandler(&SignalCaller); // I have to
}
Run Code Online (Sandbox Code Playgroud)

c++ boost boost-signals

3
推荐指数
1
解决办法
1283
查看次数

提升信号连接管理

在过去的两个晚上,我一直在抨击我,试图弄清楚这一点并没有取得积极成果.每当我想要连接一个类的成员函数和另一个类的信号时,在增强信号中有一个东西,如果我想稍后断开连接,我必须将结果连接保存在一个变量中.如果以后,我想将相同的成员函数连接到其他类信号(成员函数仍然与前一个类信号连接)我必须保存这个新连接以便管理它.我的问题是,有什么方法可以避免这种情况吗?

c++ boost-signals

3
推荐指数
2
解决办法
5044
查看次数

使用升压模块而没有其余的升压?

我希望在我正在开发的小型教育框架中包含增强信号,但我不想添加所有内容,因为增强功能非常大,我需要的是线程,信号1和2以及asio.

我的问题是,由于没有完整的升级库,我可能会遇到任何依赖关系或许可问题?

c++ multithreading boost boost-asio boost-signals

3
推荐指数
1
解决办法
143
查看次数

错误:"无法访问类'boost :: signals2 :: scoped_connection'中声明的私有成员?"

class Whatever
{
public:
    virtual ~Whatever();

protected:
    Whatever();
    virtual void SomeMethod();
    void OnEventOccurred(int x);

    std::vector<boost::signals2::scoped_connection> boostSignalConnections_;
}
Run Code Online (Sandbox Code Playgroud)

// .cpp

Whatever::SomeMethod()
{
    ...
    boostSignalConnections_.push_back(
        anObject->AddEventOccurredObserver(
            std::bind(&Whatever::OnEventOccurred,
                      this, std::placeholders::_1)));
    ...
}
Run Code Online (Sandbox Code Playgroud)

(注意AddEventOccurredObserver只委托boost::signals2::connect()并返回boost::signals2::connection)

我收到以下错误.很难解释模板错误,但似乎错误是在成员声明中引起的std::vector<boost::signals2::scoped_connection> boostSignalConnections_;

...\vc\include\xmemory(202): error C2248:  
    'boost::signals2::scoped_connection::scoped_connection' :
    cannot access private member declared in class 'boost::signals2::scoped_connection'
...\boost_1_47\boost\signals2\connection.hpp(234) : see declaration of
'boost::signals2::scoped_connection::scoped_connection'
...\boost_1_47\boost\signals2\connection.hpp(210) :
    see declaration of 'boost::signals2::scoped_connection'
...\vc\include\xmemory(201) : while compiling class template member function
'void std::allocator<_Ty>::construct(boost::signals2::scoped_connection *,_Ty &&)'
with
[
    _Ty=boost::signals2::scoped_connection
] …
Run Code Online (Sandbox Code Playgroud)

c++ boost noncopyable boost-signals boost-signals2

3
推荐指数
1
解决办法
1788
查看次数

有没有办法阻止boost :: signal调用它的插槽,如果其中一个返回true?

我正在使用boost库,我的问题是关于boost :: signals.
我有一个信号可能会调用许多不同的插槽,但只有一个插槽将匹配该调用,所以我希望这个特定的插槽返回true并且调用将停止.
可能吗?
它有效吗?
如果效率不高,你们可以建议我更好的方法吗?

c++ signals-slots boost-signals

2
推荐指数
1
解决办法
1252
查看次数

是否需要构建boost.signals2库?

我的系统在构建boost库时遇到了问题.据我所知,大多数boost库(幸运的是)只是不需要构建的头文件(有一些例外).是否需要构建boost :: signals2库?boost.signals2库是否依赖于boost.signals库?

c++ boost boost-signals boost-signals2

2
推荐指数
1
解决办法
2109
查看次数

使用模板boost :: signal slot_type

构建以下函数时出现构建错误:

template <class T> class Event {
public:
    typedef boost::signal<void (void*, const T)>    signal_t;
    typedef boost::signals::connection              connection_t;   

public:
    Event() { }

    connection_t connect(signal_t::slot_type subscriber){
        return signal.connect(subscriber);
    }
}
Run Code Online (Sandbox Code Playgroud)

错误:

error: 'class boost::signal<void ()(void*, T), boost::last_value<typename boost::function_traits<void ()(void*, T)>::result_type>, int, std::less<int>, boost::function<void ()(void*, T)> >::slot_type' is not a type
Run Code Online (Sandbox Code Playgroud)

我认为这与它的模板化事实有关,但我不确定如何解决它.我试过添加,这样

connection_t connect(signal_t::slot_type<T> subscriber)
Run Code Online (Sandbox Code Playgroud)

但这只是产生了另一个错误.

c++ boost boost-signals

1
推荐指数
1
解决办法
573
查看次数