Tal vez ya se le ha pedido algo similar, y seguro, que es una pequeña crítica ...constexpr e inicialización
Tengo un montón de constantes std::map
s para cambiar entre enum (class)
valores y sus representaciones std::string
(en ambos sentidos). Alguien aquí me señaló que estos mapas se inicializarán en tiempo de ejecución, cuando se ejecute otro código de inicialización, antes de que mi programa ejecute todo lo bueno. Esto significaría que las expresiones constantes afectarían el rendimiento del tiempo de ejecución, ya que los mapas se construyen a partir de sus pares enum-string.
Como ejemplo ilustrativo, aquí es un ejemplo de uno de estos mapas:
enum class os
{
Windows,
Linux,
MacOSX
};
const map<string, os> os_map =
{ {"windows", os::Windows},
{"linux", os::Linux},
{"mac", os::MacOSX} };
const map<os, string> os_map_inverse =
{ {os::Windows, "windows"},
{os::Linux, "linux"},
{os::MacOSX, "mac"} };
estaría el 11 constexpr
C++ tiene ninguna influencia en el rendimiento, o es mi suposición de una pena de inicialización en tiempo de ejecución falsa? Creo que un compilador puede insertar un contenedor STL constante como datos puros en el ejecutable, pero aparentemente eso puede no ser tan fácil como lo hago sonar.
Por qué no hacer ¿intenta con 'boost :: bimap' para el mapeo de dos lados entre la enumeración y su representación de cadena? Es mucho menos probable que cometa un error al agregar nuevos valores. – Xeo
Xeo: ¿aprovechar Boost para algo tan simple como esto? No, gracias, estoy libre de dependencia, y realmente me gustaría mantenerlo de esa manera;) ... Incluso podría reemplazar el mapa string-> enum con un 'unordered_map' y el enum-> string map con un' vector '(los valores enum no son importantes, solo cuentan uno por uno) para el rendimiento si eso mejorara algo. 'boost :: bimap' sería una mierda en comparación :) – rubenvb
@rubenvb: Y sin embargo [Boost.MultiIndex] (http://www.boost.org/libs/multi_index/) podría hacer exactamente eso, mucho más sucintamente, con 0 gastos generales. Por favor, no vea Boost como una 'dependencia'. – ildjarn