>  기사  >  백엔드 개발  >  C에서 이름(std::string에 저장됨)으로 함수를 호출하려면 어떻게 해야 합니까?

C에서 이름(std::string에 저장됨)으로 함수를 호출하려면 어떻게 해야 합니까?

Patricia Arquette
Patricia Arquette원래의
2024-10-26 07:04:31938검색

How Can I Call Functions by Name (Stored in a std::string) in C  ?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.