我正在从事需要对多个存储类进行通用缓存的项目。我的基类如下所示:
template<typename ... Types>
class VarCache{
template<typename T>
using item_type = shared_ptr<holder<T>>;
template<typename T>
using map_type = map<int64_t,item_type <T>>;
public:
std::tuple<map_type<Types>...> caches;
};
我需要编写不接受任何参数的函数,但是通过在缓存对象上调用它,它将迭代遍历所有存储的map变体和perfrom动作(删除不需要的项)。
例子:
我有VarCache<A,B,C> cache
和方法prune<T>();
在哪里T
之一A,B,C
并通过调用cache.prune_all_variants();
我希望缓存执行
prune<A>();
prune<B>();
prune<C>();
这可能吗 ?
您可以使用一些技巧来为参数包的每个元素调用函数。这是一个选择:
void prune_all_variants() {
(void)std::initializer_list<int> {
(prune<Types>(), 0)...
};
}
在C ++ 17中,可以使用fold表达式将其简化为以下内容:
void prune_all_variants() {
(prune<Types>(), ...);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句