0
我正在使用模板重写一个类。代码如下所示。如何使用模板缓存(存储)shared_ptr类?
更改是将模板添加到栏类。但是,更改后,缓存映射不起作用,因为我无法确定实际栏类的类型。
有没有简单的方法来解决这个问题(例如现有的样本/编码模式)?
或者我需要尝试继承,创建一个虚拟bar_base
并存储父母shared_ptr
并每次上/下投!如果是这样,我是否需要找出模板类型为map key?
在此先感谢。
EDIT(更新): 下面是规划的变化:
1添加模板栏类
#include <iostream>
#include <map>
#include <memory>
namespace foo {
template <typename T = std::string>
class bar {
public:
int m_key;
T m_dummy;
bar(int key, T var) : m_key(key), m_dummy(var) {}
};
// static std::map<int, std::shared_ptr<bar>> cache;
template <typename T = std::string>
static std::shared_ptr<bar<T>> create(int key, T var) {
//if (cache.find(key) != cache.end()) {
//std::cout << "cache used" << std::endl;
//return cache[key];
//}
//else {
auto p = std::make_shared<bar<T>>(bar<T>(key, var));
//cache[key] = p;
return p;
//}
}
};
class mystring {
public:
mystring(std::string x) {
}
};
int main(int argc, char * argv[]) {
auto a = foo::create<std::string>(1, "aaa");
auto b = foo::create<std::string>(1, "bbb");
auto c = foo::create<std::string>(1, "ccc");
auto d = foo::create<mystring>(1,mystring("ddd"));
return 0;
}
2适应缓存/创建地图。怎么样?
请显示什么是不工作,并删除所有不相关的行(你可以删除,但仍然产生错误的行) –
你说这是旧的代码?那么更新的代码呢? –
'bar'的哪一种特殊化,'T'的类型是'foo :: create'应该创建? –