Re[6]: Не могу явно инстанцировать шаблон функции-члена
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 11.10.18 15:23
Оценка:
Здравствуйте, 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:


Спасибо, попробую с ними.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.