C에서 이름(std::string)으로 함수 호출
C에서는 함수에 저장된 이름으로 함수를 직접 호출할 수 없습니다. 끈. 그러나 이 기능을 구현하기 위한 해결 방법이 있습니다.
기본 접근 방식
기본 접근 방식에는 일련의 "if-else" 문 또는 "switch-case"를 사용하는 것이 포함됩니다. 문자열에 저장된 함수 이름을 명시적으로 확인하고 해당 함수를 호출하는 구문입니다. 제공된 코드 조각에서 볼 수 있듯이 이 방법을 사용하려면 함수 목록과 해당 이름을 수동으로 유지 관리해야 합니다.
Reflection
질문에서 제안된 접근 방식은 다음과 같습니다. 런타임 시 프로그램 요소에 동적으로 액세스하고 조작하는 것을 포함하는 리플렉션. C에서는 리플렉션이 기본적으로 지원되지 않지만 일부 라이브러리는 제한된 리플렉션 기능을 제공합니다.
std::map을 사용한 해결 방법
한 가지 해결 방법은 std::map을 생성하는 것입니다. 함수 이름(std::string 키)을 함수 포인터(int (*FnPtr)(int, int) 값)와 연결합니다. 이를 통해 이름을 기준으로 함수를 효율적으로 검색하고 호출할 수 있습니다.
제공된 코드 조각은 이 접근 방식을 보여줍니다.
<code class="c++">#include <iostream> #include <map> int add(int i, int j) { return i + j; } int sub(int i, int j) { return i - j; } typedef int (*FnPtr)(int, int); int main() { std::map<std::string, FnPtr> myMap; myMap["add"] = add; myMap["sub"] = sub; std::string s("add"); int res = myMap[s](2, 3); std::cout << res; }</code>
이 예에서 myMap[s](2, 3 ) 표현식은 문자열 "add"와 연관된 함수 포인터를 검색하고 이를 인수 2와 3으로 호출하여 결과적으로 5를 출력합니다.
위 내용은 C에서 이름(std::string에 저장됨)으로 함수를 호출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!