C++模板特化问题

标签 c++

我正在尝试实现一个适用于所有类型的通用 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/

相关文章:

c++ - 来自 GDB 的消息 "During startup program terminated with signal SIGKILL"

c++ - 类没有成员 "Class"

c++ - 使用函数参数作为常量表达式的一部分 - gcc vs clang

c++ - 使用C++循环实现队列数据结构

c++ - XP/Vista 的音量(平衡)控制

c++ - 模板类与抽象类

c++ - 如何枚举 POSIX/c c++ 目录中的所有文件?

c++ - 在 Ubuntu 上找不到 TCP_NODELAY

c++ - 静态链接现有的 Windows 二进制文件

c++ - 如何使用 qDebug 打印字符串文字和 QString?