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'應該創建? –