Как сделать разную обработку для разных типов в шаблоне функции?
==================================================================

 Здравствуйте! Подскажите как реализовать с помощью шаблонов. На данный момент имеется две функции, которые выполняют практически одинаковую работу. Кроме того, функции отличаются типом входных данных: одна принимает только целые значения, а другая только double. Казалось бы просто объединить их в одну с использованием шаблона, но есть нюанс. Дело в том, что в зависимости от типа данных надо произвести разные действия над данными. Данные поступают от железки и передаются в целочисленном виде, а программа знает коэффициент преобразования (1, 0.1, 0.01 и т.д.). Однако, некоторые элементы управления в программе позволяют задавать параметры в формате double. Соответственно у меня есть две функции, которые в зависимости от типа данных, либо применяют умножение на коэффициент, либо нет. Также почему нельзя напрямую применить шаблон - т.к. входные параметры устанавливаются сразу на 2 элемента управления - один принимает только целые числа, а другой принимает double. Вот и приходится домножать где-надо, а где надо делить. Например слайдер принимает только целые и его значения от 0 до 100, а spinbox устанавливаются значения с коэффициентом 0,1, т.е. в диапазоне от 0 до 10.   
  

Подскажите целесообразно ли вообще в данной ситуации использование шаблонов? и если да, то как описать это? 

 Можно использовать std::variant (<https://en.cppreference.com/w/cpp/utility/variant> ), если новые плюсы не доступны, то tagged union (<https://en.wikipedia.org/wiki/Tagged_union> там есть пример на плюсах).   

Можно использовать и шаблоны. Если доступны новые плюсы, то посмотрите в сторону if constexpr (<https://en.cppreference.com/w/cpp/language/if> там ближе к низу примеры). Если новые плюсы не доступны, то enable\_if (<https://en.cppreference.com/w/cpp/types/enable_if> ) + std::is\_same (<https://en.cppreference.com/w/cpp/types/is_same> ) или std::is\_integer/std::is\_floating\_point (<https://en.cppreference.com/w/cpp/types/is_integer> / [https://en.cppreference.com/w/cpp/types/is\_floatin...](https://en.cppreference.com/w/cpp/types/is_floating_point) ).