2012-03-22 9 views
5

estoy tratando de utilizar un código de ejemplo y mi compilador no compilar esta línea:¿Qué es Bool <true> en C++? ¿Es por impulso?

static void exitActions(Host& h, Bool<true>) {} 

compilador es MS VS2005. No reconozco a Bool, así que no estoy seguro de cómo reemplazarlo. Es este valor predeterminado equivalente de parámetros:

static void exitActions(Host& h, bool b = true) {} 

La muestra es de http://accu.org/index.php/journals/252. El código es solo fragmentos en el texto, no es un fragmento de lo que se incluye, tan difícil de resolver. No hay definición para una plantilla Bool.

+1

Bool es un tipo, y se excitActions probablemente sobrecargado en base a este tipo. ¿Podría agregar el mensaje de error que está viendo a la pregunta? – Marcin

+0

Bueno, cualquier referencia en 'exitActions' al argumento bool probablemente se arruine. Si tuviera que cambiar todas las referencias para escribir 'bool', probablemente no vería que las cosas se derrumban, pero piense en esto como una respuesta preliminar hasta obtener respuestas mucho más inteligentes. – prelic

+0

¿Qué sucede cuando coloca el cursor en 'Bool ' y usa '' Ir a la definición ''? – Naveen

Respuesta

5

supongo Bool se define como

template <bool B> struct Bool{}; 

Puede utilizar esta por alguna coincidencia de patrones rudimentaria:

void exitActions(Bool<true>) { std::cout << "called with true\n"; } 
void exitActions(Bool<false>) { std::cout << "called with false\n"; } 

int main() 
{ 
    exitActions(Bool<true>()); // prints "called with true" 
    exitActions(Bool<false>()); // prints "called with false" 
} 

Por supuesto, esto sólo tiene sentido si sobrecarga Bool<true> con Bool<false>. Pero en la fuente http://accu.org/index.php/journals/252 (adivinado por Marcin), este es el caso.

Existe también una llamada función similar

Tran<T,S,T>::entryActions(host_, Bool<false>()); 
+0

Usando esta definición me permite compilar el programa, gracias. ¿Hay un nombre para este estilo de programación o un enlace web? Es como una función sobrecargada? Uno u otro se llama depende de si pasa verdadero o falso, supongo? Como dices, solo tiene sentido en el contexto del resto del código, lo estudiaré más. –

+0

Nunca antes había visto eso en C++ (en otros lenguajes de programación esto se llama coincidencia de patrones, como ya se ha escrito). Normalmente, escribiría algo como 'template <> void exitActions () {...}' y 'template <> void exitActions () {...}'. Pero como esto se usó con frecuencia, él decidió acortar eso al introducir este tipo de 'Bool'. – ipc

Cuestiones relacionadas