C++ テンプレート + テンプレートで作成された stl + 高速な C++11 コードを実行しようとする作業は苦痛であると言わざるを得ません。ほとんどの場合、奇妙なコンパイラ エラーがたくさんあります...助けが必要です、コード:
#include <SFML/Graphics.hpp>
#include <memory>
#include <map>
template <class T>
class cResourceManager
{
public:
T& get(const std::string & key);
bool add(const std::string & key, const std::shared_ptr<T> & ptr);
private:
std::map <std::string, std::shared_ptr<T> > resources;
};
template <class T>
T& cResourceManager<T>::get(const std::string & key)
{
class std::map<std::string, std::shared_ptr<T>>::const_iterator citr = resources.find(key);
if (citr != resources.end()) return resources[key];
}
template <class T>
bool cResourceManager<T>::add(const std::string & key, const std::shared_ptr<T> & ptr)
{
if (resources.find(key) == resources.end())
{
if(ptr != nullptr)
{
resources.insert( std::move( std::make_pair(key, ptr) ) );
return true;
}
}
return false;
}
int main(int argc, char **argv)
{
cResourceManager<sf::Texture> resmgr;
resmgr.add("key", std::make_shared<sf::Texture>() );
resmgr.get("key");
return 0;
}
resmgr.get("key") 行で、「main.cpp:19:51: エラー: タイプ 'std::map, std: の式からのタイプ 'sf::Texture&' の参照の初期化が無効です: :shared_ptr, std::less >, std::allocator, std::shared_ptr > > >::mapped_type {aka std::shared_ptr}'" 理由がわからず、テンプレートと STL を使用してエラーを理解しようとするのは非常に難しい私に。何が悪いのかわかりません。
2つ目はちょっとした質問です。行: resources.insert(std::move(std::make_pair(key, ptr)))パフォーマンスを向上させるために std::move 関数が必要ですか? コインテイナーを扱う際に一時的なオブジェクトをできるだけ避けたいのですが、すべてを理解しているとは思わないので、よくわかりません。
ありがとう!