阵列中的存储对象 [英] Storing objects in the array

查看:120
本文介绍了阵列中的存储对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要保存在地图上提升信号的对象(协会:信号名称→信号对象)。这些信号签名是不同的,因此第二种类型的地图应的boost ::任何

 地图<字符串,任何> mSignalAssociation;

问题是如何存储对象,而不定义新的信号特征的类型?

 的typedef的boost :: signals2 ::信号u;无效(INT重点code)> sigKey pressed;
mSignalAssociation.insert(make_pair(键pressed,sigKey pressed()));
//这是我所需要的:传递对象,而无需类型定义
mSignalAssociation [键pressed] =(类型名称的boost :: signals2 ::信号u;无效(INT重点code)>());
//一个更艰难,这将无法正常工作。我不想用这个
sigKey pressed MKEY pressed;
mSignalAssociation [键pressed] = MKEY pressed;

这一切tryings抛出错误:

  /usr/include/boost/noncopyable.hpp:在拷贝构造函数'的boost :: signals2 :: signal_base :: signal_base(常量的boost :: signals2 :: signal_base&安培;):
从/usr/include/boost/signals2/detail/signals_common.hpp:17:0包含在文件中,
/usr/include/boost/noncopyable.hpp:27:7:错误:'的boost :: noncopyable进行_ ::不可复制::不可复制(常量的boost :: noncopyable进行_ ::不可复制和放大器;)是私有的
/usr/include/boost/signals2/signal_base.hpp:22:5:错误:在这一范围内
----------
/usr/include/boost/signals2/detail/signal_t​​emplate.hpp:在拷贝构造函数'的boost :: signals2 ::信号1<无效,INT和放大器;,提振:: signals2 :: optional_last_value<无效>中整型,性病::少< INT>中的boost ::功能<无效(INT)>中的boost ::功能<无效(常量的boost :: signals2 ::连接和放大器;,INT)>中的boost :: signals2 ::互斥> ::信号1(常量提高:: signals2 ::信号1<无效,INT,提振:: signals2 :: optional_last_value<无效>中整型,性病::少< INT>中的boost ::功能<无效(INT)>中的boost ::功能<无效(常量的boost :: signals2 ::连接和放大器;,INT)>中的boost :: signals2 ::互斥>&安培;):
从/usr/include/boost/$p$pprocessor/iteration/detail/iter/forward1.hpp:52:0包含在文件中,
/usr/include/boost/signals2/detail/signal_t​​emplate.hpp:578:5:注意:合成方法的boost :: signals2 :: signal_base :: signal_base(常量的boost :: signals2 :: signal_base&安培;)先在这里需要
                从/usr/include/boost/signals2.hpp:16,
---------
/usr/include/boost/signals2/$p$pprocessed_signal.hpp:在拷贝构造函数'的boost :: signals2 ::信号u;无效(INT)> ::信号(常量的boost :: signals2 ::信号u;无效(INT )GT;&安培;):
从/usr/include/boost/signals2/signal.hpp:36:0包含在文件中,
/usr/include/boost/signals2/$p$pprocessed_signal.hpp:42:5:注:合成方法的boost :: signals2 ::信号1<无效,INT,提振:: signals2 :: optional_last_value<无效>中INT,的std ::以下< INT>中的boost ::功能<无效(INT)>中的boost ::功能<无效(常量的boost :: signals2 ::连接和放大器;,INT)>中的boost :: signals2 ::互斥> ::信号1(常量的boost :: signals2 ::信号1<无效,INT,提振:: signals2 :: optional_last_value<无效>中整型,性病::少< INT>中的boost ::功能<无效(INT)>中提振::函数<无效(常量的boost :: signals2 ::连接和放大器;,INT)>中的boost :: signals2 ::互斥>&安培;)先在这里需要
                从/home/ockonal/Workspace/Projects/Pseudoform-2/include/Core/Systems.hpp:6,


解决方案

这无关与任何地图。升压信号仅仅是不可复制的。您可以在一个智能指针将它们包装,如的shared_ptr 如果你想要的东西,是可复制后自行清理。

I want to save boost signals objects in the map (association: signal name → signal object). The signals signature is different, so the second type of map should be boost::any.

map<string, any> mSignalAssociation;

The question is how to store objects without defining type of new signal signature?

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;

All this tryings throw the error:

/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,

解决方案

This has nothing to do with any or map. Boost signals are simply non-copyable. You can wrap them in a smart pointer such as shared_ptr if you want something that's copyable and cleans up after itself.

这篇关于阵列中的存储对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆