在编译期,获得函数参数个数

来源:互联网 发布:linux关闭nagle算法 编辑:程序博客网 时间:2024/06/15 12:15

#if _MSC_VER >= 1900

#define _CONST_EXPR constexpr
#define _NO_EXCEPT noexcept
#else
#define _CONST_EXPR inline
#define _NO_EXCEPT throw()
#endif
#define MYLIB_START namespace myLib{
#define MYLIB_END   }
MYLIB_START
template<typename _FuncTy>
struct _get;
template<typename _RetTy, typename... paramsTy>
struct _get<_RetTy(*)(paramsTy...)>
{
 static size_t const value = sizeof...(paramsTy);
};
template<typename _FuncTy>
_CONST_EXPR size_t getParamNum(_FuncTy) noexcept
{
 return _get<_FuncTy>::value;
}
MYLIB_END
#undef  MYLIB_START
#undef  MYLIB_END
int testFunc0()
{
 return 0;
}
int testFunc1(int i, int k)
{
 return 0;
}
int testFunc2(int i, int k, int c)
{
 return 0;
}
void main()
{
 size_t i0 = myLib::getParamNum(testFunc0);
 size_t i1 = myLib::getParamNum(testFunc1);
 size_t i2 = myLib::getParamNum(testFunc2);
}