gpt4 book ai didi

c++ - 有智能指针和原始指针的通用方法吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:58:40 24 4
gpt4 key购买 nike

我有一个关于 C++ 模板的问题。

template <class Container>
void tryTriggers(const Container& entities)
{
for (Container::const_iterator ent = std::begin(entities);ent != std::end(entities); ++ent)
{
if ((*ent)->isReadyForTriggerUpdate() && (*ent)->isAlive())
{
for (TriggerList::const_iterator trg = std::begin(_triggers);trg != std::end(_triggers); ++trg)
{
//Try(..) is a method takes *entity(entity's pointer) for parameters.
//But my container was implemented with unique_ptr.
//ex) vector<unique_ptr<entity>> v;
//So I used get() method for acquire raw pointer.

(*trg)->Try((*ent).get());
}
}
}
}

代码是一些容器的模板成员函数。

它只适用于包含 isReadyForTriggerUpdate()isAlive() 的类。

Try(..) 是一个以*entity(entity's pointer)为参数的方法。

在我的例子中,我使用 unique_ptr int 容器,所以我必须使用 get() 方法来获取原始指针。

这个函数没有任何问题,但是..如果我使用一些带有原始指针的容器,比如

vector <entity*> v;

那就麻烦了。

问题:我想让它更通用,以便它可以使用原始指针和智能指针。有什么解决办法吗?

STL中,有std::begin(con)用于解决con.begin()中的迭代问题。所以我期待一些通用的方法,比如

std::begin(con)

针对上述问题。

最佳答案

除了@Slava 的非常正确的答案之外,一般来说,您总是可以编写一个模板函数并将其专门用于原始指针:

template<class T>                                                                                                                           
auto find_address_of(T &&p) -> decltype(p.get())
{
return p.get();
}

template<typename T>
T *find_address_of(T *p)
{
return p;
}

关于c++ - 有智能指针和原始指针的通用方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35044361/

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