2012-02-08 10 views
19

por ejemplo boost::function se mueve casi en su totalidad a std::function, lo mismo es con boost::shared_ptr¿El estándar C++ 11 proporciona algo así como boost :: any?

pero no puedo encontrar std::any? ¿Se cambió el nombre o no se colocó en un nuevo estándar en absoluto por algún motivo?

+13

No. (y la carga) –

+0

No todo en impulso se ha trasladado a std sin embargo nada le impide usarlo en impulso.Supongo que algunas bibliotecas de impulso podrían reescribirse para C++ 11, algunas pueden eliminarse completamente y son bastante redundantes, aunque probablemente seguirán estando disponibles para compatibilidad con versiones anteriores. – CashCow

Respuesta

15

No todas las bibliotecas de boost lo convierten en estándar (e incluso aquellos que lo hacen pueden tener componentes eliminados). En general, el comité es bastante conservador cuando se trata de agregar a la biblioteca estándar (ya que es casi imposible eliminar algo más adelante si la inclusión fue un error (p. Ej., Porque hay una mejor alternativa)).

boost::function y boost::shared_ptr donde prácticamente se da una inclusión porque ya forman parte de tr1. boost::any por otro lado no hizo el corte. Sin embargo, podría incluirse en la biblioteca estándar en un momento posterior (por ejemplo, en el siguiente informe técnico, consulte here). Si bien es bueno tener boost::any, no lo calificaría como tan importante como, por ejemplo, shared_ptr.

Concluyendo: boost::any no es parte de C++ 11, ya que el comité no ve ninguna necesidad apremiante de incluirlo

+2

quizás pueda actualizar su respuesta para reflejar 17 cambios :) –

3

creo que la posición por defecto era que una biblioteca no estarían incluidos en el nuevo estándar a menos que se haya enviado para ser incluido y luego aprobado por el comité.

No sé si alguna vez se envió boost :: any. Probablemente no. Sin embargo, todavía puedes usar boost :: any.

Supongo que con C++ 11 se reescribirán las bibliotecas de impulso, algunas se considerarán redundantes y otras se cambiarán para usar la semántica de movimiento, las listas de inicializadores y las auto escritas en estilo C++ 11 con C + +11 funciones.

Es muy probable que las nuevas bibliotecas estén en C++ 11 pero los paquetes de impulso existentes se mantendrán disponibles durante un tiempo, ya que muchos no habrán cambiado a los compiladores de C++ 11. También supongo que solo las características de C++ 11 implementadas por todos los compiladores principales entrarán en el paquete al principio.

Esto es probablemente más una pregunta para los programadores que stackoverflow, y aún mejor para comp.std.C++. Moderado y aumentar las listas de correo.

16

Dado que se formuló la pregunta, avanzamos hacia std :: experimental :: any como una característica optional eliminada del estándar C++ 14.

Fue entonces implemented en GCC 5.1, al menos.

La característica se estandarizó desde entonces en C++ 17, dando como resultado std::any. Vea también C++ 17's std::variant para una unión segura de tipo que tiene una alternativa limitada de tipos conocidos, o está vacía (gracias remy-lebeau por la punta).

+2

['std :: variant'] (http://en.cppreference.com/w/cpp/utility/variant) (similar a' boost :: variant') también se ha estandarizado y aparecerá en C++ 17. –

Cuestiones relacionadas