Maison > développement back-end > C++ > le corps du texte

Technologie de réflexion des appels de fonction C++ : passage de paramètres et accès dynamique aux valeurs de retour

王林
Libérer: 2024-05-05 09:48:01
original
878 Les gens l'ont consulté

La technologie de réflexion des appels de fonction C++ permet d'obtenir dynamiquement les paramètres de fonction et les informations sur la valeur de retour au moment de l'exécution. Utilisez les expressions typeid(decltype(...)) et decltype(...) pour obtenir des informations sur les paramètres et les types de valeurs renvoyées. Grâce à la réflexion, nous pouvons appeler dynamiquement des fonctions et sélectionner des fonctions spécifiques en fonction des entrées d'exécution, permettant ainsi un code flexible et évolutif.

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

Technologie de réflexion d'appel de fonction C++ : transmission de paramètres et accès dynamique aux valeurs de retour

La réflexion d'appel de fonction est une technologie puissante pour obtenir et manipuler des informations de fonction au moment de l'exécution. En exploitant les informations de métadonnées du compilateur C++, nous pouvons accéder dynamiquement aux paramètres, aux valeurs de retour et aux informations de type d'une fonction, permettant ainsi un code hautement flexible et extensible.

Passage de paramètres

Pour obtenir les informations sur les paramètres de la fonction, vous pouvez utiliser typeid(decltype(...)) 来获取参数类型的类型信息。`cpp
// pour obtenir les informations de type des paramètres de la fonction

inclure

class MyClass {
public:

void Function(int a, double b, std::string c) {
    // ...
}
Copier après la connexion

};

int main() {

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

// 获取参数类型
cout << typeid(decltype(p)).name() << endl;  // MyClass::Function(int, double, std::string)
Copier après la connexion

}

**返回值**

要获取函数的返回值类型信息,可以使用 `decltype(...)` 表达式:
Copier après la connexion

// Obtenez les informations de type de la valeur de retour de la fonction

include

class MyClass {
public:

int Function() {
    // ...
}
Copier après la connexion

};

int main() {

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

// 获取返回值类型
cout << typeid(decltype(p())).name() << endl;  // int
Copier après la connexion

}

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

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

//Fonction d'appel dynamique

include

include

class MyFunctions {
public:

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

double Divide(double a, double b) {
    return a / b;
}
Copier après la connexion

};

int principal( ) {

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
Copier après la connexion

}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal