von*_*dip 12 c++ const covariance
我有一个带签名的功能
void Foo(list<const A*>)
Run Code Online (Sandbox Code Playgroud)
我想通过它
list<A*>
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?(注意 - 列表不是常量,只是列表的成员)
Jer*_*fin 19
你遇到的问题是即使T *可以隐式转换为a T const *,模板系统也不会"意识到"它,所以a whatever<T *>和whatever<T const *>完全不相关的类型,并且没有从一个到另一个的隐式转换.
为了避免这个问题,我可能会避免传递一个集合.相反,我有这个函数需要一对迭代器.A list<A *>::iterator 可以隐式转换为a list<A *>::const_iterator.就此而言,我可能会将该函数作为模板,因此可以使用任意类型的迭代器.
这可能是为您节省了不少麻烦-一个list几乎只是容器的一个很好的选择,所以有一个非常大的机会,有一天你会想从更改list<A *>到vector<A *>或可能deque<A *>-如果你让你的函数通用,你将能够在不重写功能的情况下做到这一点.