调用常用方法/将常用函数应用于具有不同类型对象的不同容器
Calling common methods / applying common functions to different containers with different types of objects
我有几个不同类型的对象集合和各种类型的容器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
相关文章:
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 使用std::函数映射对象方法
- 是否需要删除包含对象的"pair"?
- 如何在自删除后将对象设置为nullptr
- 迭代时从向量和内存中删除对象
- 构造对象的歧义
- 调用常用方法/将常用函数应用于具有不同类型对象的不同容器