> 백엔드 개발 > C++ > 본문

C++ 함수 호출 반영 기술: 매개변수 전달 및 반환 값의 동적 액세스

王林
풀어 주다: 2024-05-05 09:48:01
원래의
879명이 탐색했습니다.

C++ 함수 호출 반사 기술을 사용하면 런타임 시 함수 매개변수 및 반환 값 정보를 동적으로 얻을 수 있습니다. 매개변수 및 반환 값 유형 정보를 얻으려면 typeid(decltype(...)) 및 decltype(...) 표현식을 사용하십시오. 리플렉션을 통해 동적으로 함수를 호출하고 런타임 입력을 기반으로 특정 함수를 선택할 수 있으므로 유연하고 확장 가능한 코드가 가능해집니다.

C++ 函数调用反射技术:参数传递和返回值的动态访问

C++ 함수 호출 리플렉션 기술: 매개변수 전달 및 반환 값의 동적 액세스 ​​

함수 호출 리플렉션은 런타임에 함수 정보를 얻고 조작하기 위한 강력한 기술입니다. C++ 컴파일러의 메타데이터 정보를 활용하면 함수의 매개변수, 반환 값, 유형 정보에 동적으로 액세스할 수 있어 매우 유연하고 확장 가능한 코드가 가능해집니다.

매개변수 전달

함수의 매개변수 정보를 얻으려면 typeid(decltype(...)) 来获取参数类型的类型信息。`cpp
//를 사용하여 함수 매개변수의 유형 정보를 얻을 수 있습니다.

include

class MyClass {
public:

void Function(int a, double b, std::string c) {
    // ...
}
로그인 후 복사

};

int main() {

using namespace std;
auto p = &MyClass::Function;

// 获取参数类型
cout << typeid(decltype(p)).name() << endl;  // MyClass::Function(int, double, std::string)
로그인 후 복사

}

**返回值**

要获取函数的返回值类型信息,可以使用 `decltype(...)` 表达式:
로그인 후 복사

// 함수 반환 값의 유형 정보를 가져옵니다

include

class MyClass {
public:

int Function() {
    // ...
}
로그인 후 복사

};

int main() {

using namespace std;
auto p = &MyClass::Function;

// 获取返回值类型
cout << typeid(decltype(p())).name() << endl;  // int
로그인 후 복사

}

**实战案例:动态函数调用**

假设我们有一个包含一系列以不同方式接受参数并生成不同类型结果的函数的类 `MyFunctions`。我们可以使用函数调用反射来动态地调用这些函数,并根据运行时的输入选择特定的函数:
로그인 후 복사

//동적 호출 함수

include

include

class MyFunctions {
public:

int Sum(int a, int b) {
    return a + b;
}

double Divide(double a, double b) {
    return a / b;
}
로그인 후 복사

};

int main ( ) {

using namespace std;
MyFunctions functions;

// 获取函数指针
auto sumPtr = &MyFunctions::Sum;
auto dividePtr = &MyFunctions::Divide;

// 根据输入动态选择函数
function<double(double, double)> func;
if (choice == "sum") {
    func = function<double(double, double)>(sumPtr);
} else if (choice == "divide") {
    func = function<double(double, double)>(dividePtr);
}

// 调用动态选择后的函数
double result = func(10.0, 5.0);
cout << result << endl;  // 输出:2.0
로그인 후 복사

}

위 내용은 C++ 함수 호출 반영 기술: 매개변수 전달 및 반환 값의 동적 액세스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿