C++ Template오류입니다.. explicit specialization in non-namespace scope 'class JsCPPUtils::SmartPointer<T>'
글쓴이: jic5760 / 작성시간: 금, 2018/04/13 - 4:02오후
template <typename T> class TestClass { public: explicit TestClass() { printf("Nothing\n"); } template <typename U> TestClass(U *ptr) { printf("OTHER CLASS\n"); } template <> // 여기서 오류발생 TestClass(T *ptr) { printf("SAME CLASS\n"); } };
error: explicit specialization in non-namespace scope 'class TestClass'
이렇게 하며 오류가 나온다.. 이런 글들이 있는데 봐도 어떻게 해결할 수 있는지 모르겠네요...ㅠㅠ
Forums:
해결했습니다..
template을 빼주니 되네요... 뭐징...ㅋㅋ
왜냐면
수정 전 본문에서는 template specialization입니다. template class의 member function은 그 template class 자체가 속한 namespace에서 specialize를 해줘야 해요. 그리고 이 경우에는 T도 specialize 해서 fully-specialize 해줘야 하구요. 왜 표준이 그렇게 되어 있는지는 모르겠는데, 아마도 template class 안에서 template member function을 specialize 하게 해주면 partially specialized되는 거고 이건 지금의 표준에서는 허용하지 않는 거라서 그런 게 아닐까 싶네요.
수정 후의 버전은 사실 template member function이 아니라 그냥 template class의 regular function이 됐어요. 그 바로 위의 typename U의TestClass와 별개의 overloaded된 constructor입니다.
그렇군요 감사합니다~^^
상세한 설명 감사합니다!
댓글 달기