클래스 생성자 템플릿 추론 논쟁
템플릿 매개변수는 다음 코드와 같이 함수 인수에서 편리하게 추론할 수 있습니다.
template <typename T> void swap(T& a, T& b) { T temp = a; a = b; b = temp; }
그러나 클래스 생성자에는 유사한 접근 방식이 허용되지 않아 C 사이에서 의문이 제기되었습니다. 프로그래머. 왜 안 되겠습니까?
이러한 불일치의 원인은 객체 구성의 복잡성에 있습니다. 생성자는 클래스의 유일한 진입점이 아닙니다. 복사 생성자와 할당 연산자도 중요한 역할을 하며 생성자에서만 템플릿 매개변수를 추론하면 모호성이 발생할 수 있습니다.
다음 예를 고려하세요.
template <typename T> class Variable { T data; public: Variable(T d) { data = d; } };
템플릿 추론이 허용된 경우 다음 코드는 유효합니다:
Variable var(2); // Equivalent to Variable<int> var(2);
그러나 복사 구성이나 할당을 사용하면 어떻게 될까요? 연산자?
MyClass m(string s); MyClass *pm; *pm = m;
이 경우 컴파일러가 MyClass pm의 템플릿 유형을 결정하는 것이 어려울 수 있습니다.
이 문제를 완화하기 위해 C 17에서는 생성자 인수에서 유형 추론을 도입했습니다. . 이를 통해 생성자 매개변수에서 템플릿 매개변수를 추론할 수 있으므로 특정 상황에서 명시적인 유형 인수가 필요하지 않습니다. 예:
std::pair p(2, 4.5); // Inferred as std::pair<int, double> p(2, 4.5); std::tuple t(4, 3, 2.5); // Inferred as std::tuple<int, int, double> t(4, 3, 2.5);
이 추론 기능은 아직 개발 중이며 향후 C 표준에서 수정될 수 있다는 점에 유의하는 것이 중요합니다. 그럼에도 불구하고 이는 코드를 단순화하고 유형 안전성을 향상시키는 데 있어 중요한 진전입니다.
위 내용은 함수 템플릿과 같은 클래스 생성자에 대해 C 템플릿 매개변수를 추론할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!