我们为您的字符串转换一个小工具功能,这样我就不必去围绕创建ostringstream对象遍布模板专业化其中模板类型也是一个模板
template<typename T>
inline string ToString(const T& x)
{
std::ostringstream o;
if (!(o << x))
throw BadConversion(string("ToString(") + typeid(x).name() + ")");
return o.str();
}
我想要的地方为没有默认超载运算符的字符串流(即std :: pair,std :: set,我自己的类)的实例提供了此方法的一些特殊功能,并且遇到了与模板有关的困难。我将与标准::对举个例子说明,如果我想能够
string str = ToString(make_pair(3, 4));
我能想到的这样做是定义明确的分工为INT
template<>
inline string ToString(const pair<int,int>& x)
{
std::ostringstream o;
if (!(o << "[" << x.first << "," << x.second << "]"))
throw BadConversion(string("ToString(pair<int,int>)"));
return o.str();
}
的唯一途径有没有一种方法可以为通用情况定义此方法?
template<>
inline string ToString(const pair<T1,T2>& x)
{
std::ostringstream o;
if (!(o << "[" << x.first << "," << x.second << "]"))
throw BadConversion(string("ToString(pair<T1,T2>)"));
return o.str();
}
感谢您的好解释 – 2009-06-04 00:42:43
欢迎您:) – 2009-06-04 00:51:43