我想創建一個簡單的信號/插槽系統在C + +沒有助力,但我有一些問題,當我嘗試使用它的參數,這裏是我的代碼:std ::函數和信號/槽系統
我的信號類:
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警告: 一個候選功能並不可行:從「無效(*)(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++)
{
t = (*i);
t(data); // Here
}
}
我該如何解決呢?如果我想給我的「發射」方法提供一個對象或多個參數,hoc可以嗎?
謝謝!
是[this](http://liveworkspace.org/code/2d733163b1af460eedcf05a7fb760608)你正在嘗試什麼?你指定'T' =='void(int)',但'emit'似乎期望'T' =='int'。 – ildjarn
Oups!謝謝,那個工作更好,確實:) – Dono