让我们说我们有这样的功能
template <class T, class T2>
T getMin(T a, T2 b) {
if(a < b)
return a;
return b;
}
Run Code Online (Sandbox Code Playgroud)
如果我们这样调用函数
int a, b;
long c;
a = getMin(b, c);
Run Code Online (Sandbox Code Playgroud)
如果c是<a,那么c的值将被类型转换为int.
是否可以使返回类型具有灵活性,以便返回int,long或任何其他类型的"<"而不是类型的类型?
编辑:函数中涉及的类型可以是从简单类型到复杂类的任何类型,其中某些时候无法进行类型转换.
peo*_*oro 10
C++ 0x将允许您使用auto关键字,以便让编译器派生表达式的返回时间.
对于C++ 03,我发现自动化此类过程的唯一方法是定义一个模板类Promotion,该类定义两种类型之间的最强类型,然后将其专门用于您可能需要使用的任何类型.
template<> class Promotion< long, int > { typedef long strongest; }
template<> class Promotion< int, long > { typedef long strongest; }
Run Code Online (Sandbox Code Playgroud)
因此:
template< typename T1, typename T2 >
Promotion<T1,T2>::strongest function( const T1 &a, const T2 &b ) { ... }
Run Code Online (Sandbox Code Playgroud)
如果您选择尝试此解决方案,我建议使用自动生成的头文件生成促销专精.
编辑:我在阅读其他(现已删除)答案后重新阅读了该问题:
您无法返回较小变量的类型.那是因为变量的值只能在运行时找到,而函数返回类型必须在编译时定义.
我提出的解决方案将始终返回两个变量类型之间的最强类型.
| 归档时间: |
|
| 查看次数: |
22367 次 |
| 最近记录: |