C++ Function Template With Flexible Return Type

前端 未结 2 1706
说谎
说谎 2021-01-03 00:20

Let\'s say that we have a function like so

template 
T getMin(T a, T2 b) {
  if(a < b)
    return a;
  return b;
}
2条回答
  •  难免孤独
    2021-01-03 00:57

    C++0x will allow you to use the auto keyword in order to let the compiler derive the return time of an expression.


    For C++03 the only way I found to automatize such process is to define a template class Promotion that defines the strongest type between two types, and then specialize it for any couple of types you might need to use.

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

    and thus:

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

    If you choose to try this solution, I'd suggest to generate the Promotion specializations with an automatically generated header file.


    Edit: I reread the question after reading the other (now deleted) answer:

    You can't return the type of the smaller variable. That's because the value of the variables will only be found out at runtime, while your function return type must be defined at compile time.

    The solution I proposed will return always the strongest type between the two variables' type.

提交回复
热议问题