C++ 함수 호출 반사 기술을 사용하면 런타임 시 함수 매개변수 및 반환 값 정보를 동적으로 얻을 수 있습니다. 매개변수 및 반환 값 유형 정보를 얻으려면 typeid(decltype(...)) 및 decltype(...) 표현식을 사용하십시오. 리플렉션을 통해 동적으로 함수를 호출하고 런타임 입력을 기반으로 특정 함수를 선택할 수 있으므로 유연하고 확장 가능한 코드가 가능해집니다.
C++ 함수 호출 리플렉션 기술: 매개변수 전달 및 반환 값의 동적 액세스
함수 호출 리플렉션은 런타임에 함수 정보를 얻고 조작하기 위한 강력한 기술입니다. C++ 컴파일러의 메타데이터 정보를 활용하면 함수의 매개변수, 반환 값, 유형 정보에 동적으로 액세스할 수 있어 매우 유연하고 확장 가능한 코드가 가능해집니다.
매개변수 전달
함수의 매개변수 정보를 얻으려면 typeid(decltype(...))
来获取参数类型的类型信息。`
cpp
//를 사용하여 함수 매개변수의 유형 정보를 얻을 수 있습니다.
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(...)` 表达式:
// 함수 반환 값의 유형 정보를 가져옵니다
class MyClass {
public:
int Function() { // ... }
};
int main() {
using namespace std; auto p = &MyClass::Function; // 获取返回值类型 cout << typeid(decltype(p())).name() << endl; // int
}
**实战案例:动态函数调用** 假设我们有一个包含一系列以不同方式接受参数并生成不同类型结果的函数的类 `MyFunctions`。我们可以使用函数调用反射来动态地调用这些函数,并根据运行时的输入选择特定的函数:
//동적 호출 함수
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!