C++模板专用化问题

C++模板专用化问题,c++,C++,我正在尝试实现一个通用的toString函数,它可以处理所有类型。我们所有的内部类都派生自包含toString签名的抽象。换句话说,我们所有的内部类都有某种形式的toString方法 问题是,基本类型int、char、double。。没有本机toString函数。但是我们有一个实用函数,它调用词法转换来返回原语的字符串值。我们不需要一大堆if语句,所以我尝试创建一个模板化的实用程序类来完成这项工作 我的第一个技巧如下: template<class T> class

我正在尝试实现一个通用的toString函数,它可以处理所有类型。我们所有的内部类都派生自包含toString签名的抽象。换句话说,我们所有的内部类都有某种形式的toString方法

问题是,基本类型int、char、double。。没有本机toString函数。但是我们有一个实用函数,它调用词法转换来返回原语的字符串值。我们不需要一大堆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。我不知道如何设置它。有人能给你建议吗?

你的问题不是更简单吗?在所有抽象对象上,您都知道要做什么,所以您只需要为内置类型提供重载函数:

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();
}