ホームページ  >  記事  >  バックエンド開発  >  C++ 関数呼び出しリフレクション テクノロジー: パラメーターの受け渡しと戻り値の動的アクセス

C++ 関数呼び出しリフレクション テクノロジー: パラメーターの受け渡しと戻り値の動的アクセス

王林
王林オリジナル
2024-05-05 09:48:01861ブラウズ

C 関数呼び出しリフレクション テクノロジにより、実行時に関数のパラメータと戻り値の情報を動的に取得できます。 typeid(decltype(...)) および decltype(...) 式を使用して、パラメータと戻り値の型情報を取得します。リフレクションを通じて、関数を動的に呼び出し、ランタイム入力に基づいて特定の関数を選択できるため、柔軟でスケーラブルなコードが可能になります。

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

#C 関数呼び出しリフレクション テクノロジ: パラメーターの転送と戻り値の動的アクセス

関数呼び出しリフレクションは、関数呼び出しの一種です。実行時のリフレクション 関数情報を取得および操作するための強力な手法。 C コンパイラのメタデータ情報を活用することで、関数のパラメータ、戻り値、型情報に動的にアクセスでき、柔軟性と拡張性の高いコードが可能になります。

パラメータの受け渡し

関数のパラメータ情報を取得するには、

typeid(decltype(...)) を使用してパラメータのタイプ情報の type。 `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 74c4be802b34aebec18e62057cde9841

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。