gpt4 book ai didi

c++:我可以在不知道它是映射还是 vector 的情况下处理 std::_Container_base 吗?

转载 作者:行者123 更新时间:2023-11-30 02:38:47 27 4
gpt4 key购买 nike

猜猜我有一个

class C1 : public B { /*...*/ };
class C2 : public B { /*...*/ };

std::map<std::string, C1> myMap;
std::vector<C2> myVector;

有没有一种方法(语法是什么)来调用一个函数 foo...

  • 只需要处理B的功能
  • 只需要在 map 和 vector 的所有元素上处理它们而不关心它们是如何组织的?

std::vectorstd::map 都是 std::_Container_base 但我不知道如何编写(伪代码)的语法:

void foo(std::_Container_base-of-Bs)

编辑:它是_Container_base,而不是_Tee

最佳答案

C++ 方法是使用模板和迭代器。

template <typename ForwardIterator>
void process_bs(ForwardIterator first, ForwardIterator last) {
std::for_each(first, last, [](B& b) {
// do something to b here
});
}

对于 vector、list、deque 和 set,您可以使用 begin 和 end 简单地调用它:

process_bs(v.begin(), v.end());

对于 map ,元素类型是pair<const Key, Value> ,所以你必须调整迭代器。您可以将它与 Boost.Range 一起使用,例如:

#include <boost/range/adaptor/map.hpp>
auto values = m | boost::adaptors::map_values;
process_bs(values.begin(), values.end());

关于c++:我可以在不知道它是映射还是 vector 的情况下处理 std::_Container_base 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30455217/

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