Ich habe folgendes:std :: vector von std :: function
typedef std::function<void(const EventArgs&)> event_type;
class Event : boost::noncopyable
{
private:
typedef std::vector<event_type> EventVector;
typedef EventVector::const_iterator EventVector_cit;
EventVector m_Events;
public:
Event()
{
}; // eo ctor
Event(Event&& _rhs) : m_Events(std::move(_rhs.m_Events))
{
}; // eo mtor
// operators
Event& operator += (const event_type& _ev)
{
assert(std::find(m_Events.begin(), m_Events.end(), _ev) == m_Events.end());
m_Events.push_back(_ev);
return *this;
}; // eo +=
Event& operator -= (const event_type& _ev)
{
EventVector_cit cit(std::find(m_Events.begin(), m_Events.end(), _ev));
assert(cit != m_Events.end());
m_Events.erase(cit);
return *this;
}; // eo -=
}; // eo class Event
Und während der Kompilierung:
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm(41): error C2451: conditional expression of type 'void' is illegal
1> Expressions of type void cannot be converted to other types
Jetzt
, verstehe ich das, weil von dem, was in dem Vektor gespeichert wird und der Bediener ==
. Gibt es eine andere Möglichkeit, std::function
in einem STL-Container zu speichern? Muss ich etwas anderes einpacken?
Danke dafür. Ich denke, mein Hauptanliegen ist, wie ich diese ID im Handumdrehen erstelle. Ich möchte die Lesbarkeit der Verwendung des '+ =', um eine Funktion/Lambda in den Ereignisvektor zu übergeben. Ich denke, die Wrapperklasse muss die ID basierend auf der übergebenen Funktion generieren. Vielleicht die Adresse? –