클래스 템플릿 질문합니다

조회수 524회

template class Sample { private: struct NODE { DATA s_data; BYTE s_checksum;

        NODE()
        {
            s_checksum = CHECK_SUM;
        }
    };
}

클래스 템플릿은 위와 같이 정의되어 있고 저기 DATA 부에 다른 클래스를 넣어서 사용하려고하는데요 문제는 DATA 에 넣으려고하는 클래스의 기본생성자는 없고 int 한개를 가지는 생성자밖에없는데 이를 호출하려면 어떤식으로 해야할지 모르겠습니다.

  • 외부 class 원형 class test { public: test(int a) { } }

  • 클래스 템플릿 호출 Sample sample(...);

이런식으로 작성할 때 test의 생성자가 올바르게 호출되려면 어떻게 해야하나요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 그냥 Node 기본 생성자에 s_data 값을 부르면 되는 거 아닌가요? 정확히 왜 기본 생성자가 아니라 1 arg c'tor (int 1개를 가지는 생성자)가 있으면 호출을 할 수 없는지 이해가 안 가지면 몇가지 예시를 드리겠습니다.

    기본 생서자처럼 쓸려면 디폴트 매개변수를 주는 방법도 있습니다.

    class Data
    { 
    public:
        // 디폴트 매개변수
        Data(int a = 0)
        {
        }
    };
    

    그리고 sample 클래스에서는

    template <typename Data>
    class Sample 
    { 
    public:
        struct Node
        {
            Data s_data;
            Byte s_checksum;    
    
            node()
                : s_data()
            {
                s_checksum = CHECK_SUM;
            }
        }
    };
    

    하지만 보통 생성자나 소멸자를 사용할 때 모든 맴버 변수를 모두 초기화 해줍니다. 이때 호출이 가능하겠죠.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)