You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取任意函数指针的返回值类型,实现变量类型自动推导?

从任意函数指针推导返回值类型

针对你的需求,有几种简洁的方式可以从任意函数指针中获取返回值类型,或者直接推导变量类型,以下是具体实现:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 15:50:30