Глядя на id Software Исходный код Doom3 Я нашел это решение для реализации различных версий нескольких алгоритмов для каждой конкретной архитектуры ЦП (получено с помощью cpuid_t
): Процессор Doom3 SIMD
Однако у них есть один экземпляр процессора , который, конечно, требует инициализации во время выполнения.
Интересно, есть ли подходящая альтернатива для достижения чего-то подобного, но для таких объектов, как Vector3, Matrix4x4 и кватернион, например. То есть выберите правильную реализацию класса на основе текущих поддерживаемых встроенных функций процессора.
...
class Vector3_Generic { };
class Vector3_SSE { };
class Vector3_AVX { };
...
В настоящее время я использую предопределенные макросы для выбора правильной реализации, но это может ограничить исполняемый файл для данной архитектуры. , Итак, есть ли более элегантное решение для этого?