ブーストなしで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;
};
私のテストクラス:
class Object
{
public:
Object();
void sayHello( int i );
};
だから、私は自分のクラスをそのように使います:
Signal<void(int)> signal;
signal.connect( std::bind( &Object::sayHello, player, std::placeholders::_1 ) );
signal.emit( 0 );
Signal.cpp に警告があります: Candidate function not viable: no known conversion from 'void (*)(int)' to 'int' for 1st argument;
このコードでは:
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++ )
{
t = (*i);
t( data ); // Here
}
}
どうすれば解決できますか?「emit」メソッドにオブジェクトまたは倍数のパラメーターを指定したい場合、どうすればよいですか?
ありがとう!