Выберите реализацию класса с учетом флагов CPUID - PullRequest
0 голосов
/ 15 февраля 2020

Глядя на id Software Исходный код Doom3 Я нашел это решение для реализации различных версий нескольких алгоритмов для каждой конкретной архитектуры ЦП (получено с помощью cpuid_t): Процессор Doom3 SIMD

Однако у них есть один экземпляр процессора , который, конечно, требует инициализации во время выполнения.

Интересно, есть ли подходящая альтернатива для достижения чего-то подобного, но для таких объектов, как Vector3, Matrix4x4 и кватернион, например. То есть выберите правильную реализацию класса на основе текущих поддерживаемых встроенных функций процессора.

...
class Vector3_Generic { };
class Vector3_SSE { };
class Vector3_AVX { };
...

В настоящее время я использую предопределенные макросы для выбора правильной реализации, но это может ограничить исполняемый файл для данной архитектуры. , Итак, есть ли более элегантное решение для этого?

...