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

如何根据模板参数确定模板函数的返回类型?

实现模板函数返回类型依赖输入类型的方案

你的需求完全可以实现,根据不同的C++标准版本,有几种简洁的写法:

1. C++98及以上兼容写法

直接将返回类型指定为result_type<U, V>::type,注意用typename关键字告诉编译器这是依赖于模板参数的类型:

template<typename U, typename V>
typename result_type<U, V>::type function()
{
    // 函数体示例:返回对应类型的默认构造对象
    return typename result_type<U, V>::type();
}

2. C++11及以上的后置返回类型写法

利用C++11引入的返回类型后置语法,写法更直观,尤其适合返回类型依赖函数参数的场景(无参模板函数同样适用):

template<typename U, typename V>
auto function() -> typename result_type<U, V>::type
{
    return typename result_type<U, V>::type{};
}

3. C++14及以上的自动返回类型推导

C++14支持自动推导函数返回类型,只要函数体内的return语句能推导出明确类型,编译器会自动匹配result_type定义的返回类型:

template<typename U, typename V>
auto function()
{
    using R = typename result_type<U, V>::type;
    return R{};
}

完整测试示例

结合你定义的result_type,完整可运行代码如下:

#include <complex>

// 你的result_type特化定义
template<class U, class V> struct result_type                { using type = U; };
template<>                 struct result_type<float, double> { using type = double; };
template<>                 struct result_type<double, float> { using type = double; };
// 补充std::complex的特化示例
template<typename T> struct result_type<std::complex<T>, std::complex<T>> { using type = std::complex<T>; };
template<> struct result_type<std::complex<float>, std::complex<double>> { using type = std::complex<double>; };

// C++11写法示例
template<typename U, typename V>
auto function() -> typename result_type<U, V>::type
{
    return typename result_type<U, V>::type{};
}

int main() {
    // 验证不同参数组合的返回类型
    double r1 = function<float, double>();       // 返回double
    double r2 = function<double, float>();       // 返回double
    int r3 = function<int, int>();               // 返回int
    std::complex<double> r4 = function<std::complex<float>, std::complex<double>>(); // 返回std::complex<double>
    return 0;
}

内容的提问来源于stack exchange,提问作者ScratchingTheSurface

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:55:20