std::map を値として含むシングルトン デザイン パターンに基づいてクラスを作成しようとしています。
//Data.h
#ifndef Data_h
#define Data_h
// from std
#include<map>
using namespace std;
template <typename T>
class Data
{
private:
Data();
virtual ~Data();
map<string,T >* value_map;
static Data<T> *m_data;
public:
//list of method
static Data<T>* instance()
{
if (NULL == m_data){
m_data=new Data;
}
return m_data;
}
virtual T getValue(string name);
virtual void insert(string name, T value);
//virtual void finish();
// member field
};
#endif
// Data.cpp
#include"Data.h"
#include<iostream>
//implementation of class data
//which is based on singleton pattern design
template <typename T>
Data<T>::Data()
{
value_map=new map<string, <T> >();
}
template <typename T>
Data<T>::~Data()
{
}
template <typename T>
T Data<T>::getValue(string name)
{
return value_map[name];
}
template <typename T>
void Data<T>::insert(string name,T value)
{
typedef map<string, typename T> mapa;
value_map->insert(typename mapa::value_type(name,value));
}
残念ながら、このコードはコンパイルできません。値をマップに挿入できるようにするには、何を変更する必要がありますか。よろしくお願いします。
.cpp ファイルと .h ファイルをマージしました。現在、コードは次のようになっています。
#ifndef Data_h
#define Data_h
// from ROOT- nie wiem jak zrobic
#include<map>
#include<string>
using namespace std;
template <typename T>
class Data
{
private:
Data();
virtual ~Data();
map<string,T > *value_map;
static Data<T> *m_data;
public:
//list of method
static Data<T>* instance()
{
if (NULL == m_data){
m_data=new Data;
}
return m_data;
}
virtual T getValue(string name);
virtual void insert(string name, T value);
//virtual void finish();
};
template <typename T>
Data<T>::Data()
{
value_map=new map<string, T>();
};
template <typename T>
Data<T>::~Data()
{
};
template <typename T>
T Data<T>::getValue(string name)
{
return value_map[name];
};
template <typename T>
void Data<T>::insert(string name,T value)
{
typedef map<string, T > mapa;
value_map->insert( mapa::value_type(name,value));
};
#endif
しかし、盗むとコンパイルされません。クラスを修正するにはどうすればよいですか。特に、メソッドの挿入はコンパイル エラーを返します。あなたからの便りを楽しみにしています。