C는 매개변수 유형을 기반으로 한 함수 오버로딩을 지원하지만 반환에 따라 다양한 함수 구현을 선택할 수 있는 흥미로운 가능성도 제공합니다. 값. 이는 동일한 입력이 원하는 다른 출력을 생성할 수 있는 경우를 처리하는 데 유용한 기술이 될 수 있습니다.
제시된 사용 사례에는 다음을 반환해야 하는 mul 함수가 있습니다. 정수 변수에 할당되면 정수가 되고, 문자열 변수에 할당되면 문자열이 됩니다. 그러나 C에서는 이를 달성하기 위해 명시적인 차별화가 필요합니다.
std::string s = mul(54, 3); // Proper conversion
대체 접근 방식은 함수 시그니처에 더미 매개변수를 추가하는 것입니다. 원하는 반환 유형의 NULL 포인터를 전달함으로써 컴파일러가 적절한 함수를 선택하도록 강제할 수 있습니다.
int mul(int* dummy, int i, int j) { return i*j; } std::string mul(std::string* dummy, char c, int n) { return std::string(n, c); } int n = mul(NULL, 6, 3); // Return integer std::string s = mul(NULL, 54, 3); // Return string
C 템플릿은 반환 값에 대한 또 다른 방법을 제공합니다. 과부하. 특정 템플릿으로 인스턴스화하지 않으면 컴파일되지 않는 코드로 "더미" 함수를 만들 수 있습니다.
template<typename T> T mul(int i, int j) { const int k = 25 ; k = 36 ; } template<> int mul<int>(int i, int j) { return i * j ; } template<> std::string mul<std::string>(int i, int j) { return std::string(j, static_cast<char>(i)) ; }
필요한 경우 템플릿 기반 오버로딩도 가능합니다. 다양한 반환 값 전문화에 대해 다양한 매개변수 유형을 지원합니다.
template<typename T> T mul(int i, int j) {...} template<> int mul<int>(int i, int j) {...} template<> std::string mul<std::string>(char i, int j) {...}
이러한 기술을 활용하여 프로그래머는 다양한 기능을 제공하는 함수를 만들 수 있습니다. 예상되는 반환 값 유형에 따라 출력됩니다.
위 내용은 C 함수는 반환 유형에 따라 오버로드될 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!