gpt4 book ai didi

具有灵活返回类型的 C++ 函数模板

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:17:29 25 4
gpt4 key购买 nike

假设我们有这样一个函数

template <class T, class T2>
T getMin(T a, T2 b) {
if(a < b)
return a;
return b;
}

如果我们这样调用函数

int a, b;
long c;

a = getMin(b, c);

如果 c 是 < a,则 c 的值将被类型转换为 int。

是否可以使返回类型灵活,以便返回 int、long 或任何其他被“<”认为更小的类型而不进行类型转换?

编辑:函数中涉及的类型可以是从简单类型到有时无法进行类型转换的复杂类的任何类型。

最佳答案

C++0x 将允许您使用 auto 关键字,以便让编译器推导出表达式的返回时间。


对于 C++03,我发现自动化这个过程的唯一方法是定义一个模板类 Promotion 来定义两种类型之间最强的类型,然后将它专门化为你想要的任何一对类型可能需要使用。

template<> class Promotion< long, int > { typedef long strongest; }
template<> class Promotion< int, long > { typedef long strongest; }

因此:

template< typename T1, typename T2 >
Promotion<T1,T2>::strongest function( const T1 &a, const T2 &b ) { ... }

如果您选择尝试此解决方案,我建议您使用自动生成的头文件来生成促销特化。


编辑:我在阅读了另一个(现已删除)答案后重新阅读了问题:

您不能返回较小变量的类型。这是因为变量的值只能在运行时找到,而您的函数返回类型必须在编译时定义。

我提出的解决方案将始终返回两个变量类型之间最强的类型。

关于具有灵活返回类型的 C++ 函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4530756/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com