有一个模板函数mbFun( F pFunc), pFunc接收一个成员函数,在mbFun函数内部如何知道pFunc指向的成员函数的参数个数?
时间: 2024-03-04 11:47:53 浏览: 71
要想在`mbFun`函数内部知道`pFunc`指向的成员函数的参数个数,可以使用C++11标准中提供的`std::function`模板类和`std::tuple`模板类来实现。
代码示例:
```cpp
#include <functional>
#include <tuple>
template<typename F>
void mbFun(F pFunc)
{
using ArgsTuple = std::tuple_element_t<1, decltype(std::mem_fn(pFunc))>;
constexpr int ArgsCount = std::tuple_size_v<ArgsTuple>;
// ArgsCount即为参数个数
}
class MyClass
{
public:
void myFunc(int a, int b, int c) {}
};
int main()
{
MyClass obj;
mbFun(&MyClass::myFunc); // 调用mbFun函数,参数为成员函数指针
return 0;
}
```
上述代码中,`std::mem_fn`函数可以将成员函数指针转换为函数对象,`std::tuple_element_t`和`std::tuple_size_v`可以获取函数对象的参数类型和参数个数。通过使用`constexpr`关键字,可以在编译期间计算出参数个数。
注意,上述代码仅适用于成员函数的参数个数在编译期已知的情况。如果需要支持动态参数个数,可以使用C++17标准中提供的`std::apply`函数和`std::invoke_result`模板类。
阅读全文