gpt4 book ai didi

c++ - 调用通用方法/将通用功能应用于具有不同类型对象的不同容器

转载 作者:行者123 更新时间:2023-11-28 02:12:02 33 4
gpt4 key购买 nike

在 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这样的函数,它的第一个参数接受一个泛型操作(比如一个generic 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 ) ... };
}

希望对您有所帮助。

关于c++ - 调用通用方法/将通用功能应用于具有不同类型对象的不同容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35298376/

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