2010-06-16 4 views
1

부스트 신호 객체를 맵에 저장하려고합니다 (연관 : 신호 이름 → 신호 객체). 시그니처 시그니처가 다르므로 두 번째 유형의 맵은 boost :: any이어야합니다.배열에 객체 저장

map<string, any> mSignalAssociation; 

새로운 신호 서명의 유형을 정의하지 않고 개체를 저장하는 방법은 무엇입니까?

typedef boost::signals2::signal<void (int KeyCode)> sigKeyPressed; 
mSignalAssociation.insert(make_pair("KeyPressed", sigKeyPressed())); 
// This is what I need: passing object without type definition 
mSignalAssociation["KeyPressed"] = (typename boost::signals2::signal<void (int KeyCode)>()); 
// One more trying which won't work. And I don't want use this 
sigKeyPressed mKeyPressed; 
mSignalAssociation["KeyPressed"] = mKeyPressed; 

이 모든 tryings 오류를 던져 :

/usr/include/boost/noncopyable.hpp: In copy constructor ‘boost::signals2::signal_base::signal_base(const boost::signals2::signal_base&)’: 
In file included from /usr/include/boost/signals2/detail/signals_common.hpp:17:0, 
/usr/include/boost/noncopyable.hpp:27:7: error: ‘boost::noncopyable_::noncopyable::noncopyable(const boost::noncopyable_::noncopyable&)’ is private 
/usr/include/boost/signals2/signal_base.hpp:22:5: error: within this context 
---------- 
/usr/include/boost/signals2/detail/signal_template.hpp: In copy constructor ‘boost::signals2::signal1<void, int&, boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void(int)>, boost::function<void(const boost::signals2::connection&, int)>, boost::signals2::mutex>::signal1(const boost::signals2::signal1<void, int, boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void(int)>, boost::function<void(const boost::signals2::connection&, int)>, boost::signals2::mutex>&)’: 
In file included from /usr/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:52:0, 
/usr/include/boost/signals2/detail/signal_template.hpp:578:5: note: synthesized method ‘boost::signals2::signal_base::signal_base(const boost::signals2::signal_base&)’ first required here 
       from /usr/include/boost/signals2.hpp:16, 
--------- 
/usr/include/boost/signals2/preprocessed_signal.hpp: In copy constructor ‘boost::signals2::signal<void(int)>::signal(const boost::signals2::signal<void(int)>&)’: 
In file included from /usr/include/boost/signals2/signal.hpp:36:0, 
/usr/include/boost/signals2/preprocessed_signal.hpp:42:5: note: synthesized method ‘boost::signals2::signal1<void, int, boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void(int)>, boost::function<void(const boost::signals2::connection&, int)>, boost::signals2::mutex>::signal1(const boost::signals2::signal1<void, int, boost::signals2::optional_last_value<void>, int, std::less<int>, boost::function<void(int)>, boost::function<void(const boost::signals2::connection&, int)>, boost::signals2::mutex>&)’ first required here 
       from /home/ockonal/Workspace/Projects/Pseudoform-2/include/Core/Systems.hpp:6, 
+0

나는 당신이 의미하는 바를 혼동합니다 : "문제는 새로운 시그널 서명의 타입을 정의하지 않고 어떻게 객체를 저장 하는가입니다." – GManNickG

+0

@gman, 새로운 시그널 서명을 정의하고 싶지는 않습니다. 삽입하는 동안 직접 사용하십시오. – Ockonal

답변

4

any 또는 map과는 아무 상관이 없습니다. 부스트 신호는 단순히 복사 할 수 없습니다. 복사 가능하고 자체적으로 정리할 수있는 것이 있으면 shared_ptr과 같은 스마트 포인터로 래핑 할 수 있습니다.

+0

타입 정의없이 포장하는 법? 나는 시도했다 : 'shared_ptr Ockonal

+0

거기에'typename'이 필요 없습니다. 템플릿 유형 매개 변수에 의존하는 유형에만 필요하지만, 그 경우가 아니며'typename'은 거기에서 금지됩니다. –