19.3 Function template specialization

4536 단어 c++_studyc++_study

https://www.learncpp.com/cpp-tutorial/function-template-specialization/

만약 member function이 특정 parameter type의 class object에서
특별한 functionality를 원하는 경우에 다음과 같은 방법으로 가능하다

template <typename T>
class Storage
{
private:
    T m_value {};
public:
    Storage(T value)
      : m_value { value }
    {
    }

    void print()
    {
        std::cout << m_value << '\n';
    }
};

다음과 같은 일반적인 template class가 있다

int main()
{
    // Define some storage units
    Storage<int> nValue { 5 };
    Storage<double> dValue { 6.7 };

    // Print out some values
    nValue.print();
    dValue.print();
}

위와 같이 실행하면 출력은 다음과 같다

5
6.7

그런데 우리가 double의 경우 출력을 특별하게 하고 싶다
이때 다음과 같은 코드를 사용해 print함수를 cutomizing할 수 있다

template <>
void Storage<double>::print()
{
    std::cout << std::scientific << m_value << '\n';
}

위와 같은 경우에 출력은 다음과 같다

5
6.700000e+000

이 외의 예시는 생략한다

좋은 웹페이지 즐겨찾기