プログラム設定をstd::mapとして保存するクラスを作成しようとしています。すべてのプログラム設定は文字列として保存されるので、関連するタイプにキャストされたプログラム設定を返すことができるアクセサメソッドが欲しいです。私はC++でテンプレートを作成するのは初めてで、これが私の最初の試みです。
class Settings
{
public:
Settings(void);
virtual ~Settings(void);
enum SettingName {HomePageUrl, WindowWidth};
template<class T>
T Get(SettingName name)
{
return boost::lexical_cast<T>(settings_[name]);
}
template<class T>
void Set(SettingName name, T value)
{
settings_[name] = boost::lexical_cast<CString>(value);
}
private:
std::map<SettingName, CString> settings_;
};
ただし、コンパイラエラーが発生します。
...boost\boost_1_46_1\boost\lexical_cast.hpp(776): error C2678: binary '>>' :
no operator found which takes a left-hand operand of type
'std::basic_istream<_Elem,_Traits>' (or there is no acceptable conversion)
..settings.h(33) : see reference to function template instantiation
'Target boost::lexical_cast<CString,T>(const Source &)' being compiled
ブーストを使用すると、エラー出力が非常に長くなり、何が問題になっているのかよくわかりません。