模板特化方法

时间:2012-02-24 22:44:12

标签: c++ templates

  

可能重复:
  template class member function only specialization
  If I want to specialise just one method in a template, how do I do it?

今天,一位同事向我展示了这种专业化形式(与GCC合作):

#include <iostream>
#include <sstream>

template<typename T>
struct Item {
    Item(const T & value) : value(value) {}

    std::string toString() const {
        std::stringstream ss;
        ss << value;
        return ss.str();
    }

    T value;
};


template<>
std::string Item<char>::toString() const {
    return "I am a character.";
}


int main() {
    Item<int> i(1);
    std::cout << "i: " << i.toString() << std::endl;

    Item<char> c('c');
    std::cout << "c: " << c.toString() << std::endl;
}

我一直认为只有类专业化(全部或部分)和功能专业化。

以上是标准C ++吗?如果是,那么这种专业化的名称是什么?

更新

Looks like this question has been answered before.

2 个答案:

答案 0 :(得分:0)

这是标准的c ++。 这是模板特化。在你专门研究一个方法的情况下,它被称为部分模板专业化 另外,请查看here

答案 1 :(得分:0)

这是显式特化的示例。如果仍有模板参数(但少于最初),则部分特化