2011-03-29 81 views
2

我写了一个INI类的工作,加载/保存/创建一个INI数据格式,但是现在它只能使用ASCII字符的作品,我想扩大它的工作任何类型的字符编码,所以除了char,wchar_t。要做到这一点,我必须设置各种字符串函数进行解析;我有一些设置,不过,我需要重写它们与任何类型的basic_string的工作。模板ToString函数与不同的字符编码

因此,对于我的问题,我想一个ToString功能,将与任何类型的字符编码的工作,我该怎么办呢?

我有以下两个功能:

template <typename T> 
static string toStr(const T& val) 
{ 
    stringstream out; 
    out << val; 
    return out.str(); 
} 

template <typename T> 
static wstring toWStr(const T& val) 
{ 
    wstringstream out; 
    out << val; 
    return out.str(); 
} 

回答

2

当我最初发布这个问题我很接近的答案,而是提出了纰漏,从而解决了自己的问题,而我还在键入它。所以对于那些想要一个适用于各种字符串编码的通用toString函数的人,请点击这里:

template<typename CharType, typename T> 
static basic_string<CharType, char_traits<CharType>, allocator<CharType>> toString(const T& val) 
{ 
    basic_stringstream<CharType> out; 
    out << val; 
    return out.str(); 
} 
+0

好工作!但是,我建议使用原始功能。它更舒适的使用正确命名的功能,比用模板参数不甘示弱,例如'的toString (123)'。它看起来更好。除非你需要编译时多态性。 – 2011-03-29 19:11:49

+0

@Stefan对于我的INI系统,您可以指定编码,当我开始编写我自己的JSON解析器时,我还允许您使用模板指定编码。所以除非有更好的选择,否则我认为这是我能做到的唯一方法,是的? – leetNightshade 2011-03-29 19:13:51

+0

差不多是肯定的。如果你有一门课,例如'template class IniFile;'你想从它调用一个合适的toString()重载,那么你的方式是正确的。这就是我编译时多态的意思。 – 2011-03-29 19:18:29