BOHGE_FORCEINLINE void Remove(FunctionPtr ptr)
	{
		FunctionIterator it = m_FuncMap.find( (int)ptr );
		if ( m_FuncMap.end() != it )
		{
			m_FuncMap.erase( it );
		}
	}
	BOHGE_FORCEINLINE R Unicast(void* to, EVENT_PARAM_TYPES_INPUTS )//单播
	{
		FunctionIterator it = m_FuncMap.find( (int)to );
		if ( m_FuncMap.end() != it )
		{
			it->second->Invoker(EVENT_PARAM_INPUTS);
		}
	}
	BOHGE_FORCEINLINE void ClearConnect()
	{
		for(FunctionIterator it = m_FuncMap.begin();
			it != m_FuncMap.end();
			it++)
		{
			SAFE_DELETE( it->second );
		}
		m_FuncMap.clear();
	}
	BOHGE_FORCEINLINE void Multicast( EVENT_PARAM_TYPES_INPUTS ) //多播不支持返回数值
	{
		for(FunctionIterator it = m_FuncMap.begin();
			it != m_FuncMap.end();
			)
		{
			FunctionIterator temp = it;//这么做为了在callback的时候删除自己的callback
			it ++;
			temp->second->Invoker(EVENT_PARAM_INPUTS);
		}
	}
	BOHGE_FORCEINLINE unsigned int GetListenerCount()
	{
		return m_FuncMap.size();
	}
	BOHGE_FORCEINLINE void RemoveAll()
	{
		m_FuncMap.clear();
	}
	BOHGE_FORCEINLINE FunctionPtr Connect( FunctionType* const input )
	{
		m_FuncMap.insert( std::make_pair( (int)input, input ) );
		return input;
	}
	BOHGE_FORCEINLINE FunctionPtr Connect(IFUNCTION_CLASS<R, EVENT_PARAM_TYPES>* const input)
	{
		m_FuncMap.insert( std::make_pair( (int)input, input ) );
		return input;
	}