2010-07-22 12 views
8

Me hicieron esta pregunta el lunes y, por mi vida, no sé cómo responder. Como no sé, ahora quiero averiguarlo mucho. La curiosidad está matando a este gato. Dado dos enteros, devuelve el menor en el momento de la compilación.¿Cómo hacer una comparación inferior en la metaprogramación de plantillas?

template<int M, int N> 
struct SmallerOfMandN{ 
    //and magic happenes here 
}; 

¿Tienes indicadores o cómo hacerlo? (Empezará a leer Boost MPL esta noche.)

+1

conseguirse una copia de * "plantillas de C++ - la guía completa" * y quizás * "Modern C++ diseño" * para realmente empezar a trabajar en el tema :) –

Respuesta

17

que se llama el mínimo de dos números, y que no necesita la biblioteca de peso pesado mundial como mpl a hacer tal cosa:

template <int M, int N> 
struct compile_time_min 
{ 
    static const int smaller = M < N ? M : N; 
}; 

int main() 
{ 
    const int smaller = compile_time_min<10, 5>::smaller; 
} 

Por supuesto, si se se C++ 0x fácilmente se podría decir:

constexpr int compile_time_min(int M, int N) 
{ 
    return M < N ? M : N; 
} 

int main() 
{ 
    constexpr int smaller = compile_time_min(10, 5); 
} 
+0

¿Eso es? ¿Un simple operador ternario? No tenía idea de que podría funcionar en tiempo de compilación así. ¡Muchas gracias! Tengo que esperar otros 6 min. para aceptar esta respuesta. – wheaties

Cuestiones relacionadas