代码之家  ›  专栏  ›  技术社区  ›  Roman Starkov

如果我想专门化几种类型的字符串,是否需要多个模板专门化?

  •  0
  • Roman Starkov  · 技术社区  · 15 年前

    例如:

    template<typename T>
    void write(T value)
    {
        mystream << value;
    }
    
    template<>
    void write<const char*>(const char* value)
    {
        write_escaped(mystream, value);
    }
    
    template<>
    void write<char*>(char* value)
    {
        write_escaped(mystream, value);
    }
    
    template<>
    void write<const std::string&>(const std::string& value)
    {
        write_escaped(mystream.c_str(), value);
    }
    

    这看起来我做错了,尤其是const和non const char*的两个变体。但是我检查了如果我只专门 const char * 然后通过 char * 当在VC++10中这样调用时,变量将调用非专用版本:

    char something[25];
    strcpy(something, "blah");
    write(something);
    

    正确的方法是什么?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Didier Trosset    15 年前

    你做得很好。

    char * const char * 是两个不同的类型名,它们需要各自的专门化。

        2
  •  1
  •   Pardeep    15 年前

    C++编译器将类型T和类型const t视为不同的数据类型。 因为模板适用于数据类型规范。必须为每个显式数据类型编写显式定义。

        3
  •  0
  •   Puppy    15 年前

    既然std::stringstream已经处理了所有这些类型,那么您究竟为什么需要专门处理它们呢?

    除此之外,不应该要求任何C++开发人员处理const char。或者使用MimcPy。把它做成一个std::string。并引用所述std::string。说真的,你想在这里写C吗?