C++ template 에서 일부 인자만 특수화 할때 클래스 전체를 특수화 하지 않고 메소드만 특수화 할 수 있나요?


C++ template specialization 을 테스트 중인데 specialization 2에서 에러가 나네요

// Specialization 2
template<class T> MyClassB<T,3>::MyClassB(){ cout<<"3"<<endl; }

일부 인자만 특수화 할때 클래스 전체를 특수화 하지 않고 메소드만 특수화 할 수 없는 건가요?

  • clang++ 703.0.3 으로 옵션 없이 컴파일 했습니다.
  • 전체 코드와 에러는 아래와 같습니다.
// TEMPLATE
template<class T, int I>
class MyClassB {
public:
  MyClassB(){ cout<<"DEFAULT"<<endl; }
};

// Specialization 1
template<class T>
class MyClassB<T,2> {
public:
  MyClassB();
};
template<class T> MyClassB<T,2>::MyClassB(){ cout<<"2"<<endl; }

// Specialization 2
template<class T> MyClassB<T,3>::MyClassB(){ cout<<"3"<<endl; }

// TEST
int main(){
  MyClassB<int, 1> a1;
  MyClassB<int, 2> a2;
  MyClassB<int, 3> a3;
}
  • ERROR
template2.cxx:20:34: error: nested name specifier 'MyClassB<T, 3>::' for declaration does not refer into a class, class template or
      class template partial specialization
template<class T> MyClassB<T,3>::MyClassB(){ cout<<"3"<<endl; }
  • 2016년 07월 24일에 작성됨

조회수 125


로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close