我想在地图中保存提升信号对象(关联:信号名称→信号对象)。信号签名是不同的,所以第二种类型的地图应该是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,
我很困惑你的意思是:“问题是如何存储对象而不需要定义新的信号签名类型?” – GManNickG 2010-06-16 20:52:26
@gman,我不想定义新类型的信号签名。在插入时直接使用它。 – Ockonal 2010-06-16 20:53:26