나는 대략 다음과 같은 방법으로 이루어집니다 템플릿 벡터 클래스를 만드는 오전 : 메인 템플릿템플릿 전문화 일치하는 생성자
// Main class
template <typename T, int DIMS>
class Vector
{
// Default constructor
Vector();
// Data constructor
Vector(const T data[DIMS]);
// Other functions, variables, operators
};
// 3d specialization
template <typename T>
class Vector<T, 3>
{
// Cross product for 3d vectors -- only thing in specialization
static Vector<T, 3> cross(const Vector<T, 3> a, const Vector<T, 3> b);
};
, 나는 기본 생성자뿐만 아니라 요소를 지정하는 생성자가 있습니다. 요소를 사용하여 생성자를 사용하여 컴파일하려고하면 no matching constructor for initialization of 'Vec3f' (aka 'Vector<float, 3>')
오류가 발생합니다.
내가 쳐다 보았던 비슷한 질문은 생성자가 템플릿 기반 클래스에서 자동으로 작동해야한다는 것을 나타냅니다. 그래서 여기에서 무슨 일이 일어나고 있는지 잘 모르겠습니다. 이전에 템플릿 전문화가없는 클래스에 생성자 오류가 있었고 다른 생성자가 실행 가능하지 않다고 나와서 생성자가 어떤 이유로 템플릿 기반 클래스에 복사되지 않는다고 생각하게합니다.
이 코드를 더 게시해야합니다. 어쨌든 기본 템플릿의 내용은 부분 전문화로 복사되지 않습니다. 그들은 완전히 무관하다. –
생성자 코드와 특수화에 포함 된 모든 것을 추가했습니다. 다른 것을 포함시키는 것이 도움이된다면 알려주십시오. – danielunderwood
@ T.C. 그렇다면 템플릿에서 생성자, 함수, 연산자 등 모든 선언 및 정의를 템플릿에서 특성화로 복사해야합니까? 그것은 템플릿의 목적을 무력화시키는 것이 아닌가? – danielunderwood