클래스 템플릿 질문합니다
조회수 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; } } };
하지만 보통 생성자나 소멸자를 사용할 때 모든 맴버 변수를 모두 초기화 해줍니다. 이때 호출이 가능하겠죠.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력