Max*_*rai 7 c++ boost insert map boost-any
如何从boost中将我自己的类对象插入到ptr_map中.对象是模板化的,所以我不能在地图中使用一些静态类型名称.所以我做了:
ptr_map<string, any> someMap;
Run Code Online (Sandbox Code Playgroud)
我的类继承了boost :: noncopyable.
someMap.insert("Test", new MyClass<SomeTemplate>());
Run Code Online (Sandbox Code Playgroud)
错误是:错误:no matching function for call to ‘boost::ptr_map.
UPD:我更喜欢做一些包装,不要使用boost :: any.所以:
class IWrapper { };
class MyClass : public IWrapper { };
ptr_map<string, IWrapper> someMap;
someMap.insert("Test", new MyClass<SomeTemplate>());
Run Code Online (Sandbox Code Playgroud)
为什么它不起作用(同样的错误)?我可以将继承的类传递给父接口.怎么了?
到目前为止,大多数情况下此类问题应该使用公共基类来解决。当所有类都以类似方式使用时就会出现这种情况。运行时多态性。
我已经看到不允许使用公共基类的合理理由。在这种情况下,boost::variant服务器通常会更好,因为仍然有方法来统一处理每个项目(访问者)。编译时多态性。
我从未见过 for 的合法用途boost::any。我并不是说没有,但这种情况太罕见了,我从来没有遇到过。
也就是说,试试这个。
std::map<std::string,boost::any> someMap;
boost::any insanity = new MyClass<SomeTemplate>;
someMap.insert("Test",insanity);
Run Code Online (Sandbox Code Playgroud)
或者
boost::ptr_map<std::string,boost::any> someMap;
boost::any* ive_lost_it = new boost::any( new MyClass<SomeTemplate> );
someMap.insert("Test", ive_lost_it );
Run Code Online (Sandbox Code Playgroud)