我正在尝试实现一个适用于所有类型的通用 toString() 函数。我们所有的内部类都派生自 Abstract,其中包括 toString() 的签名。换句话说,我们所有的内部类都有某种形式的 toString 方法。
问题是,原始类型(int、char、double..)没有原生的 toString 函数。但是我们确实有一个实用函数调用 lexical_cast 返回原语的字符串值。我们不想要一大堆 if 语句依赖 所以我试图创建一个模板化的实用程序类来完成这项工作。
我的第一个技巧如下:
template<class T>
class ObjectToString {
public:
string objectToString(T value) {
iil::stringUtils::StringSp ret(stringUtils::valueToString<T>(value));
return ret;
}
};
template<>
class ObjectToString <Abstract<T>*> {
public:
iil::stringUtils::StringSp objectToString(Abstract<T>* value) {
return iil::stringUtils::StringSp(new std::string("AAAA"));
}
};
现在的问题是,因为 Abstract 是一个模板类,它需要模板值 T。我不知道如何设置它。谁能给点建议?
最佳答案
简单地为 lexical_cast 提供一个特化怎么样?
template<> string lexical_cast(Abstract* obj)
{
return obj->toString();
}
关于C++模板特化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/887256/