C++模板专用化问题
我正在尝试实现一个通用的toString函数,它可以处理所有类型。我们所有的内部类都派生自包含toString签名的抽象。换句话说,我们所有的内部类都有某种形式的toString方法 问题是,基本类型int、char、double。。没有本机toString函数。但是我们有一个实用函数,它调用词法转换来返回原语的字符串值。我们不需要一大堆if语句,所以我尝试创建一个模板化的实用程序类来完成这项工作 我的第一个技巧如下:C++模板专用化问题,c++,C++,我正在尝试实现一个通用的toString函数,它可以处理所有类型。我们所有的内部类都派生自包含toString签名的抽象。换句话说,我们所有的内部类都有某种形式的toString方法 问题是,基本类型int、char、double。。没有本机toString函数。但是我们有一个实用函数,它调用词法转换来返回原语的字符串值。我们不需要一大堆if语句,所以我尝试创建一个模板化的实用程序类来完成这项工作 我的第一个技巧如下: template<class T> class
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。我不知道如何设置它。有人能给你建议吗?你的问题不是更简单吗?在所有抽象对象上,您都知道要做什么,所以您只需要为内置类型提供重载函数:
string getAsString(Abstract *obj)
{
return obj->toString();
}
string getAsString(int x)
{
return intToStr(x);
}
string getAsString(double x)
{
return doubleToStr(x);
}
例如,在适当的地方实现intToStr和doubleToStr。您的问题不是更简单吗?在所有抽象对象上,您都知道要做什么,所以您只需要为内置类型提供重载函数:
string getAsString(Abstract *obj)
{
return obj->toString();
}
string getAsString(int x)
{
return intToStr(x);
}
string getAsString(double x)
{
return doubleToStr(x);
}
等等,您可以在适当的地方实现intToStr和doubleToStr。简单地为词法转换提供专门化怎么样
template<> string lexical_cast(Abstract* obj)
{
return obj->toString();
}
简单地为词法转换提供专门化怎么样
template<> string lexical_cast(Abstract* obj)
{
return obj->toString();
}
<>你只是不想用C++的方式思考。C++已经有了ToStand,它被称为运算符< P>,你只是不想用C++的方式。C++已经有了ToStand,称为运算符< P>。这已经被SHIMS的形式处理,如书中所描述的,以及。它们是技术的基础,允许和库一般性地处理参数类型。这一点已通过垫片的形式详细讨论,如中所述,以及书籍和中所述。它们是技术的基础,允许和库一般地处理参数类型。听起来像是你们实现了Java听起来像是你们实现了Java
template<typename T>
std::string string_cast(T const &obj)
{
std::ostringstram ss;
ss<<obj;
return ss.str();
}