c – 提升任何使用率

前端之家收集整理的这篇文章主要介绍了c – 提升任何使用率前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
如何从boost中将我自己的类对象插入到ptr_map中.对象是模板化的,所以我不能在地图中使用一些静态类型名称.所以我做了:
ptr_map<string,any> someMap;

我的类继承了boost :: noncopyable.

someMap.insert("Test",new MyClass<SomeTemplate>());

错误是:错误:没有用于调用’boost :: ptr_map的匹配函数.

UPD:
我更喜欢做一些包装,不要使用boost :: any.所以:

class IWrapper { };
class MyClass : public IWrapper { };

ptr_map<string,IWrapper> someMap;
someMap.insert("Test",new MyClass<SomeTemplate>());

为什么它不起作用(同样的错误)?我可以将继承的类传递给父接口.怎么了?

解决方法

到目前为止,大多数时候这类问题都应该用一个共同的基类来解决.当类似地使用所有类时就是这种情况.运行时多态性.

我已经看到了不允许共同基类的正当理由.在这种情况下,boost :: variant通常服务器会更好,因为仍有方法统一处理每个项目(访问者).编译时间多态性.

我从未见过对boost :: any的合法用法.我不是说没有一个,但它是如此罕见,我从来没有遇到过它.

那说,试试这个.

std::map<std::string,boost::any> someMap;
boost::any insanity = new MyClass<SomeTemplate>;
someMap.insert("Test",insanity);

要么

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 );

猜你在找的C&C++相关文章