맵에 다양한 서명이 있는 함수 저장
C에서는 맵에 다양한 서명이 있는 함수를 저장해야 할 수도 있습니다. 여기서 키는 문자열이고 값은 일반 메서드입니다. 처음에는 어려워 보일 수 있지만 유형 삭제 및 템플릿 연산자의 도움으로 가능합니다.
유형 삭제
지도에서 서로 다른 서명을 사용하여 기능을 저장하려면 , 먼저 컨테이너에 입력하여 삭제합니다. 여기에는 함수 유형을 지도에서 저장하고 검색할 수 있는 공통 표현으로 변환하는 작업이 포함됩니다.
템플릿 연산자
함수 유형이 삭제된 후, 우리는 지도에 대한 템플릿 연산자()를 제공합니다. 이 연산자는 저장된 함수를 입력으로 사용하고 런타임 시 특정 매개변수를 사용하여 호출할 수 있도록 해줍니다. 제공된 매개변수는 원래 함수 서명과 정확히 일치해야 합니다. 그렇지 않은 경우 연산자는 std::bad_any_cast 예외를 발생시킵니다.
예
다음은 이를 구현하는 방법의 예입니다.
#include <any> #include <functional> #include <map> #include <string> #include <iostream> template<typename Ret> struct AnyCallable { //... }; void foo(int x, int y) { //... } void bar(std::string x, int y, int z) { //... } using namespace std::literals; int main() { // Initialize the map std::map<std::string, AnyCallable<void>> map; // Store functions in the map map["foo"] = &foo; map["bar"] = &bar; // Call the stored functions with parameters map["foo"](1, 2); map["bar"]("Hello, std::string literal"s, 1, 2); }
이 예에서는 함수를 유형 지우고 이를 호출하기 위한 템플릿 연산자()를 제공하는 래퍼 구조체 AnyCallable을 정의합니다.
고려 사항
위 내용은 C의 맵에 다양한 시그니처가 있는 함수를 어떻게 저장할 수 있나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!