本文介绍了如何获取函数指针的参数类型的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想得到一个函数指针的参数类型如下:(第二行)
I want to get the argument types of a function pointer like this : (second line)
typedef void (*fun)(int);
GetParam1Type<fun>::Result <----Result为int
不一定要使用模板,并且必须支持类成员函数指针。
is not necessarily to use template,and must support class member function pointer.
推荐答案
#include <iostream>
#include <type_traits>
struct A{};
template< typename T/*, typename U */>
struct GetParam1Type;
template< typename T, typename U, typename V >
struct GetParam1Type< T( U, V ) >
{
typedef U Result;
};
template< typename T, typename U, typename V , typename R>
struct GetParam1Type< T( U, V ,R) >
{
typedef U Result;
};
template< typename T >
struct GetParam1Type< T( void ) >
{
typedef void Result;
};
template< typename T, typename U, typename V >
struct GetParam1Type< T( * )( U, V) >
{
typedef U Result;
};
template< typename T, typename U, typename V , typename R>
struct GetParam1Type< T( * )( U, V ,R) >
{
typedef U Result;
};
template< typename T >
struct GetParam1Type< T( * )( void ) >
{
typedef void Result;
};
template< typename T, typename U, typename V, typename R >
struct GetParam1Type< T ( V::* )( U, R ) >
{
typedef U Result;
};
template< typename T, typename U, typename V, typename R , typename A>
struct GetParam1Type< T ( V::* )( U, R ,A) >
{
typedef U Result;
};
template< typename T, typename V >
struct GetParam1Type< T ( V::* )( void ) >
{
typedef void Result;
};
typedef void ( A::*fun1 )( int, long, double );
typedef void ( A::*fun2 )( );
typedef long fun3( int, long, double );
typedef long fun4( );
typedef long ( *fun5 )( int, long, double );
typedef long ( *fun6 )( );
int main( void )
{
std::cout << std::is_same< GetParam1Type< fun1 >::Result, int >::value << std::endl;
std::cout << std::is_same< GetParam1Type< fun2 >::Result, void >::value << std::endl;
std::cout << std::is_same< GetParam1Type< fun3 >::Result, int >::value << std::endl;
std::cout << std::is_same< GetParam1Type< fun4 >::Result, void >::value << std::endl;
std::cout << std::is_same< GetParam1Type< fun5 >::Result, int >::value << std::endl;
std::cout << std::is_same< GetParam1Type< fun6 >::Result, void >::value << std::endl;
getchar();
return 0;
}
这篇关于如何获取函数指针的参数类型的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!