2010-12-15 8 views

Respuesta

9

Sí, puede usar __LINE__. Además, __FILE__.

See Keywords section

Como BCS y Jonathan M Davis señalar en los comentarios, no es un caso especial para __LINE__ y amigos: cuando se usa como el valor predeterminado de un parámetro de plantilla o función, se resuelven en la ubicación de la persona que llama, no la firma de la plantilla o función. Esto es ideal para evitar que quienes llaman tengan que proporcionar esta información.

void myAssert(T)(lazy T expression, string file = __FILE__, int line = __LINE__) 
{ 
    if (!expression) 
    { 
      // Write the caller location 
      writefln("Assert failure at %s:%s", file, line); 
    } 
} 
+0

Perfecto, gracias. Sabía que no tenían que ir a cambiar todos los números de línea en las líneas de excepción cuando modificaron un archivo std lib :) –

+6

FWIW: '__LINE__' no es exactamente lo mismo que en C. Hay al menos un caso de esquina donde es diferente: si se usa como valor predeterminado para un argumento, se resuelve en la línea que hace que la llamada no sea la línea donde se define la función. – BCS

+5

que es * realmente * útil cuando se crean funciones de prueba en las que se desea que las fallas informen la línea de la llamada en lugar de dentro de la función de prueba. –

Cuestiones relacionadas