Проблема в том, что когда вы вызываете ColorBurn
и ColorDodge
, один из аргументов шаблона является плавающим, а другой - двойным:
ColorBurn(base, (2.0 * blend))
Здесь base
является плавающим, а выражение 2.0 * blend
является двойной (потому что 2.0
является двойной константой, поэтому все выражение становится двойным).
Теперь компилятор не может решить, создавать ли экземпляр ColorBurn
для floatили для double.
Чтобы исправить это, измените ваши константы на константы с плавающей точкой одинарной точности (что, скорее всего, вам и нужно):
ColorBurn(base, (2.0f * blend))
И аналогично для ColorDodge
.
Обратите внимание, что у вас все еще будут проблемы, если вы попытаетесь создать экземпляр BlendVividLightf
для чего-то, кроме float - ваши функции слишком часто предполагают, что вы имеете дело со значениями с плавающей запятой, поэтому вы будетенеобходимо ввести некоторые преобразования типов, если вы хотите, чтобы они работали для других типов аргументов.