gpt4 book ai didi

c++ - 有 typedef std::map,my_description> 如何从我的函数返回 & shared_ptr?

转载 作者:行者123 更新时间:2023-11-28 08:18:47 28 4
gpt4 key购买 nike

所以我有这样的功能:

boost::shared_ptr<my_class> get_class_by_name(std::string name)
{
typedef std::map<boost::shared_ptr<my_class>, my_description> map_t;
BOOST_FOREACH(map_t::value_type it, some_object.class_map)
{
my_description descr = it.second;
if(descr.name == name)
{
return it.first;
}
}
throw std::runtime_error("Class with such name was not found map not found!");
boost::shared_ptr<my_class> null;
return null;
}

我需要它返回这样的 boost::shared_ptr,它不是 ptr 的拷贝,而是 map 内部的指针。我的主要目标是用结果做这样的事情

boost::shared_ptr<my_class> result = get_class_by_name(name);
boost::shared_ptr<my_class> null;
result = null; //(or result.reset();)

而不是用其他一些 ptr 重新分配 map 中的指针。 (我不需要删除该对象,因为在我清理 map ptr 时它可以在其他线程中使用。)

最佳答案

好吧,我不知道你到底想做什么,但这是一个基本的想法:

typedef std::shared_ptr<my_class> my_class_ptr;
typedef std::map<my_class_ptr, my_description> my_map_t;

struct FindByName
{
FindByName(cosnt std::string & s) : name(s) { };
inline bool operator()(const my_description & d) { return name == d.name; }
private:
std::string name;
};

/* Usage: */

my_map_t m = /* ... */
my_map_t::iterator it = std::find_if(m.begin(), m.end(), FindByName("bob"));

if (it != m.end()) m.erase(it);

关于c++ - 有 typedef std::map<boost::shared_ptr<my_class>,my_description> 如何从我的函数返回 & shared_ptr?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6701536/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com