gpt4 book ai didi

C++如何将非常数列表传递给需要常量列表的函数

转载 作者:IT老高 更新时间:2023-10-28 23:15:19 26 4
gpt4 key购买 nike

我有一个带有签名的函数

void Foo(list<const A*>)

我想通过它一个

list<A*>

我该怎么做?(请注意 - 列表不是恒定的,只有列表的成员)

最佳答案

你遇到的问题是,即使 T *可以隐式转换为 T const * ,模板系统没有“意识到”这一点,所以 whatever<T *>whatever<T const *>是完全不相关的类型,并且没有从一种到另一种的隐式转换。

为了避免这个问题,我可能会完全避免传递一个集合。相反,我会让函数采用一对迭代器。一个 list<A *>::iterator 可以隐式转换为 list<A *>::const_iterator .就此而言,我可能会将函数设为模板,因此它可以采用任意类型的迭代器。

这可能会为您省去不少麻烦——list很少是容器的好选择,所以有一天你很可能会想要从 list<A *> 更改至vector<A *>或者也许 deque<A *> -- 如果你将你的函数设为泛型,你就可以在完全不重写函数的情况下做到这一点。

关于C++如何将非常数列表传递给需要常量列表的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4786991/

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