调用常用方法/将常用函数应用于具有不同类型对象的不同容器

Calling common methods / applying common functions to different containers with different types of objects

本文关键字:常用 对象 同类型 方法 函数 调用 应用于      更新时间:2023-10-16

我有几个不同类型的对象集合和各种类型的容器C++。我需要在此集合中执行一些常见操作,例如,清理容器并调整其大小。有没有办法编写短代码?例如,请考虑以下代码:

#include <vector>
#include <unordered_map>
using namespace std;
class A {};
class B {};
class C {};
int main() {
    vector<A> a;
    vector<B> b;
    vector<C> c;
    unordered_map<int, int> map;
    // I would like something like this...
    for(auto& ct : {a, b, c, map}) {
        ct.clear();
        ct.reserve(1000);
    }
    return 0;
}

当然,上面的代码在 C++11 上是无效的,因为编译器无法推断列表。我有或多或少的十个容器,但这些数字可能会上升。因此,代码必须等效(大小)才能将操作分别应用于这些容器。

非常感谢您的帮助。

您可以实现一个像 apply 这样的函数,其第一个参数采用泛型操作(例如泛型 lambda),其余参数是要应用该操作的对象:

apply
(
   [](auto && c) { c.clear(); c.reserve(100); },  //use: -std=c++14
   a,
   b,
   c,
   map
);

下面是一个可能的实现:

template<typename Op, typename ... Cs>
void apply(Op op, Cs && ... args)
{
   using unpack = int[];
   unpack {0, ( op(std::forward<Cs>(args)), void(), 0 ) ... };
}

希望有帮助。

在这种情况下,

提升任何可能很有用:http://www.boost.org/doc/libs/1_60_0/doc/html/any/s02.html