小编Don*_*ono的帖子

std :: function和Signal/Slot系统

我试图在没有提升的情况下用C++创建一个简单的信号/插槽系统,但是当我尝试将它与参数一起使用时,我遇到了一些问题,这是我的代码:

我的信号类:

template <typename T> 
class Signal
{
private:
    typedef std::function<T> Slot;

public:
    Signal();

    void connect( Slot slot );
    void emit( T data );
    void emit();

private:    
    std::vector<Slot> slots;    
};
Run Code Online (Sandbox Code Playgroud)

我的测试课:

class Object
{
public:
    Object();
    void sayHello(  int i  );
};
Run Code Online (Sandbox Code Playgroud)

所以,我像这样使用我的班级:

Signal<void(int)> signal;
signal.connect( std::bind( &Object::sayHello, player, std::placeholders::_1 ) );
signal.emit( 0 );
Run Code Online (Sandbox Code Playgroud)

我在Signal.cpp中收到警告: 候选函数不可行:第一个参数没有从'void(*)(int)'到'int'的已知转换;

在这段代码中:

template <typename T>
void Signal<T>::emit( T data )
{
    typename std::vector<Slot>::iterator i;
    Slot t;

    for( i = this->slots.begin(); i != this->slots.end(); i++ …
Run Code Online (Sandbox Code Playgroud)

c++ signals signals-slots c++11 std-function

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

标签 统计

c++ ×1

c++11 ×1

signals ×1

signals-slots ×1

std-function ×1