如何获取任意函数指针的返回值类型,实现变量类型自动推导?
从任意函数指针推导返回值类型
针对你的需求,有几种简洁的方式可以从任意函数指针中获取返回值类型,或者直接推导变量类型,以下是具体实现:
1. 直接用auto自动推导变量类型
这是最直观的方式,让编译器自动根据函数指针的调用结果推导变量类型,完全不需要手动指定:
int function() { return 10; } double anotherFunc() { return 3.14; } int main() { int(*mypointer)() = function; auto value = mypointer(); // 自动推导为int类型 double(*doublePtr)() = anotherFunc; auto doubleVal = doublePtr(); // 自动推导为double类型 }
2. 用decltype显式获取返回值类型
如果需要单独获取返回值类型(比如用于定义其他变量、作为模板参数等),可以使用decltype:
int function() { return 10; } int main() { int(*mypointer)() = function; // 推导函数指针调用的返回类型 using ReturnType = decltype(mypointer()); ReturnType value = mypointer(); // ReturnType等价于int }
3. 模板特化提取类型(兼容C++11之前)
如果需要兼容更早的C++标准,或者在元编程场景下提取类型,可以通过模板特化实现:
// 通用模板框架 template<typename T> struct FunctionReturnType; // 针对无参函数指针的特化 template<typename R> struct FunctionReturnType<R(*)()> { using type = R; }; // 扩展:支持带任意参数的函数指针 template<typename R, typename... Args> struct FunctionReturnType<R(*)(Args...)> { using type = R; }; int function() { return 10; } double add(double a, double b) { return a + b; } int main() { int(*mypointer)() = function; using ReturnType = typename FunctionReturnType<decltype(mypointer)>::type; ReturnType value = mypointer(); // 类型为int double(*addPtr)(double, double) = add; using AddReturnType = typename FunctionReturnType<decltype(addPtr)>::type; AddReturnType sum = addPtr(1.5, 2.5); // 类型为double }
内容的提问来源于stack exchange,提问作者Mark Tikhonov
相关产品推荐
相关产品推荐

