Sé que los genéricos están en C# para cumplir un rol similar a las plantillas C++, pero realmente necesito generar código en tiempo de compilación. En esta situación particular, sería muy fácil resolver el problema con plantillas C++ .Plantillas en C#
¿Alguien conoce alguna alternativa? ¿Quizás un complemento VS que preproceses el código o algo así? No necesita ser muy sofisticado, solo necesito generar algunos métodos en tiempo de compilación.
Aquí hay un ejemplo muy simplificado en C++ (tenga en cuenta que este método se llamaría dentro de un ciclo cerrado con varias condiciones en lugar de solo "Avanzado" y esas condiciones cambiarían solo una vez por fotograma, usando if sería demasiado lento y escribiría todos los métodos alternativos a mano serían imposibles de mantener). También tenga en cuenta que el rendimiento es muy importante y es por eso que necesito que esto se genere en tiempo de compilación.
template <bool Advanced>
int TraceRay(Ray r)
{
do
{
if (WalkAndTestCollision(r))
{
if (Advanced)
return AdvancedShade(collision);
else
return SimpleShade(collision);
}
}
while (InsideScene(r));
}
Por curiosidad, ¿puede proporcionar un ejemplo de código de la plantilla C++ que usaría? Puede haber un enfoque alternativo que pueda lograr lo que desea en C#. –
Agregó un ejemplo simple. –
Tenga en cuenta que C# usa un compilador JIT. Por lo tanto, incluso las sentencias "if" que se evalúan en "tiempo de ejecución" pueden optimizarse en código compilado por el JIT, siempre que pueda determinar que solo se tomará una ruta. Además, si te importa este nivel de rendimiento, no deberías usar código administrado en primer lugar. –