2012-09-02 10 views
5

Creo que la respuesta a esto es no, pero solo quiero estar seguro.¿Pueden causar problemas entremezclarse std :: 's y boost ::' s :: bind y :: function?

Si tengo un std::function como parámetro en una función, ¿hay algún problema al pasar un boost::bind y viceversa?

edición:

descubrí que los marcadores de posición utilizados por impulso :: bind se importan directamente en el espacio de nombres cuando se incluye impulso \ bind.h, y son incompatibles con std :: bind. Para std :: bind, tiene que hacer referencia explícita a los marcadores de posición, como so: std :: placeholders :: _ 1, o hacer algún otro typedef o usar magic para que ambos estén disponibles simultáneamente.

+0

Es posible que desee saber qué es una expresión de enlace anidada y comprobar cómo interactúan juntas diferentes bibliotecas al respecto. –

Respuesta

10

No. Todo el propósito de std:: (y boost::) function es que pueden aceptar cualquier objeto función que puede ser llamado con el en firmas correcta incluyendo lambdas, funtores, y el resultado de cualquier tipo de unión. No les importa de dónde vino su objeto de función o de qué tipo es.

Incluso puede unirlos entre sí, aunque no estoy muy seguro de por qué lo desea.

+1

Gracias por verificar eso para mí. Descubrí que boost importa sus marcadores de posición en el espacio de nombres que entra en conflicto con los marcadores de posición de std :: bind, por lo que debe nombrar explícitamente los marcadores de posición de std usando std :: placeholders :: _ 1 – cwm9

Cuestiones relacionadas