C语言函数返回值类型后置,如何实现跟踪其返回值类型?
- 内容介绍
- 文章标签
- 相关推荐
本文共计861个文字,预计阅读时间需要4分钟。
在泛型编程中,可能需要通过参数的运算得到返回值的类型。以下是一个简化的例子:
cpptemplateR add(T t, U u) { return t + u;}
int a=1;float b=2.0;auto c=add(a, b);
template <typename R, typename T, typename U>
R add(T t, U u)
{
return t+u;
}
int a = 1; float b = 2.0;
auto c = add<decltype(a + b)>(a, b);
我们并不关心 a+b 的类型是什么,因此,只需要通过 decltype(a+b) 直接得到返回值类型即可。但是像上面这样使用十分不方便,因为外部其实并不知道参数之间应该如何运算,只有 add 函数才知道返回值应当如何推导。
那么,在 add 函数的定义上能不能直接通过 decltype 拿到返回值呢?
template <typename T, typename U> decltype(t + u) add(T t, U u) // error: t、u尚未定义 { return t + u; } 当然,直接像上面这样写是编译不过的。
本文共计861个文字,预计阅读时间需要4分钟。
在泛型编程中,可能需要通过参数的运算得到返回值的类型。以下是一个简化的例子:
cpptemplateR add(T t, U u) { return t + u;}
int a=1;float b=2.0;auto c=add(a, b);
template <typename R, typename T, typename U>
R add(T t, U u)
{
return t+u;
}
int a = 1; float b = 2.0;
auto c = add<decltype(a + b)>(a, b);
我们并不关心 a+b 的类型是什么,因此,只需要通过 decltype(a+b) 直接得到返回值类型即可。但是像上面这样使用十分不方便,因为外部其实并不知道参数之间应该如何运算,只有 add 函数才知道返回值应当如何推导。
那么,在 add 函数的定义上能不能直接通过 decltype 拿到返回值呢?
template <typename T, typename U> decltype(t + u) add(T t, U u) // error: t、u尚未定义 { return t + u; } 当然,直接像上面这样写是编译不过的。

