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

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

王林
王林원래의
2024-05-05 09:48:01863검색

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

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

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

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

매개변수 전달

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

include db98ac07aedf84c58d65e6e9066fbbc5

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 da44d27d277691559b830f97ca0443e6

class MyClass {
public:

int Function() {
    // ...
}

};

int main() {

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

// 获取返回值类型
cout << typeid(decltype(p())).name() << endl;  // int

}

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

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

//동적 호출 함수

include ce38e4109220e7a6cf9498a8a1bd07be

include 8fd0b0dd077e9e3b89425c7034f15437

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

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