Здравствуйте, andyp, Вы писали:
A>Я про ядро и возможности VS2008 мало знаю (.
Использование стандартных шаблонов само по себе никак не мешает компиляции под ядро, ибо все разруливается компилятором, но включение type_traits тянет за собой заголовки, несовместимые с заголовками WDK/DDK. Поэтому только выдирать, или определять собственное.
A>Сухая идея — избавиться от второго параметра шаблона функции выводя тип результата из типа аргумента функции, используя трейты для нужных типов.
Мне кажется, что для функций с тремя-четырьмя параметрами это будет неимоверно громоздко. Например, у меня есть функция MulAddDiv, вычисляющая выражение "(a * b + c) / d" с использованием особенностей x86 (команды перемножения 32-разрядных в 64-разрядное, и обратный вариант деления). Соответственно, для 32-разрядных типов используется эта реализация, а все остальные варианты, имеющие хотя бы один 64-разрядный параметр, реализуются "втупую".
Но из-за ублюдочного подхода C++, не позволяющего явно указать приоритеты неявных преобразований, мне приходится явно определять все возможные 32-разрядные варианты (int/long, signed/unsigned). И это я еще не использую эти функции с char и short.
Остальные варианты можно определить шаблонами, но и тут элементарная, по сути, задача превращается в танцы с бубном и сотню строк кода.
A>Если совсем уж без стандартных заголовков, то примерно вот велосипедные is_same и enable_if:
Спасибо, попробую с ними.