왜 컴파일러가 일치 항목을 찾을 수없고 자동으로 인스턴스화합니까?C++ 템플릿 클래스 유형 인스턴스화
template <typename T1, typename T2>
struct A
{
A(const T1& t1_, const T2& t2_)
: t1(t1_), t2(t2_)
{}
T1 t1;
T2 t2;
};
int main()
{
double d = 5.2;
std::string s("hi");
A a(d, s); // this doesn't compile (gcc)
A<double, std::string> a1(d, s); // OK
}
GCC에서
컴파일 오류 : 오류 : 'A' 오류 전에 템플릿 인수 누락 : 예상 ';' before 'a'
감사합니다. 하지만 왜 여러 클래스 생성자의 경우 혼란 스러울 지 모르겠다. 예를 들어, A가 클래스 B와 C에서 파생 된 경우, 여전히 중요하지 않습니다. 컴파일시 명시해야하는 유일한 변수는 명시 적으로 정의 된 변수 d와 s의 유형입니다. A (5.2, "hi")가 작동하지 않으면 이해할 수 있습니다. 그러나 d와 s의 유형은 이미 명시 적으로 정의되어 있습니다. – surfcode
다중 클래스가 아닌 같은 클래스에있는 여러 생성자. – aschepler