所以我有一堆shared_ptr作为一个名为'Handler'的类的私有成员,每个类都指向不同的模板缓存类。像这样:C++ 11/14基于模板类型在单个函数中执行不同的操作
shared_ptr< Cache<T1> > t1Cache;
shared_ptr< Cache<T2> > t2Cache;
shared_ptr< Cache<T3> > t3Cache;
每个Cache类简单地保持了与字符串作为一个键和T作为项目和功能来获得/更新和添加项目到地图的地图。我想在'Handler'中有一个成员函数来进行更新,添加和获取操作。所以,我可以打电话给例如:(凡ITEM_TYPE是一个枚举)
Handler handler;
auto something = handler.getItem(key1, TYPE_T1);
handler.addItem(key2, TYPE_T2, newItem);
handler.updateItem(key3, TYPE_T3, newValue);
我试图在基于枚举像这样第一只具有开关:
template <typename T>
auto addItem(const std::string& key, ITEM_TYPE type, T nItem)
{
switch(type)
{
case TYPE_T1:
t1Cache->addItem(key, nItem);
break;
case TYPE_T2:
t2Cache->addItem(key ,nItem);
break;
}
}
不幸的是我的基本知识模板,所以我没有意识到这是行不通的。目前作为一种临时解决方案,即使我为每种类型使用不同的功能,但我真的很想将它们合并为一个。我认为也许'constexpr if'会有帮助,但不被支持,这甚至有可能吗?
编辑:对不起标题是不是真的措辞吧,不知道如何标题此
什么是'ITEM_TYPE'?这听起来像一个枚举或int。您需要**类型**不能使模板工作。刚开始时很难缠住你的头。 – AndyG
目前还不清楚你的功能是什么意思,难以回答这个问题。你也可能想描述你想要完成的事情,但不清楚模板在这里是否合适。 – jhauris
做这些不同的功能看起来/行为有什么不同吗?你的'Cache'类是什么样的? – AndyG