有一个模板函数mbFun( F pFunc), pFunc接收一个成员函数,在mbFun函数内部如何知道pFunc指向的成员函数的参数个数? 用于vs2017环境
时间: 2024-03-04 12:48:53 浏览: 24
在C++中,想要获取一个成员函数的参数个数,可以使用模板元编程中的"traits"技术。其中,函数参数个数可以通过函数类型推导来实现。我们可以写一个traits模板类,用于获取成员函数的参数个数。示例代码如下:
```cpp
// 定义一个traits模板类
template<typename T>
struct member_function_traits;
// 模板特化,用于获取成员函数的参数个数
template<typename R, typename C, typename... Args>
struct member_function_traits<R(C::*)(Args...)>
{
static const size_t arity = sizeof...(Args);
};
// 模板特化,用于获取常量成员函数的参数个数
template<typename R, typename C, typename... Args>
struct member_function_traits<R(C::*)(Args...) const>
{
static const size_t arity = sizeof...(Args);
};
// 定义一个mbFun函数,用于获取成员函数的参数个数
template<typename F>
void mbFun(F pFunc)
{
size_t argCount = member_function_traits<decltype(&F::operator())>::arity;
std::cout << "The number of arguments is: " << argCount << std::endl;
}
```
在上面的代码中,定义了一个traits模板类member_function_traits,用于获取成员函数的参数个数。其中,模板参数T为函数类型,通过模板特化来获取成员函数的参数个数。在mbFun函数中,通过调用member_function_traits模板类来获取成员函数的参数个数。
最后,可以使用以下代码来测试mbFun函数:
```cpp
class A
{
public:
void foo(int x, double y) {}
};
int main()
{
A a;
mbFun(&A::foo); // 输出:The number of arguments is: 2
return 0;
}
```
希望这个回答可以帮助到您。