Шаблоны C ++ и «нет подходящей функции для вызова» - PullRequest
4 голосов
/ 21 июля 2010

Я получаю странную ошибку. У меня есть функция следующей подписи:

 template <typename DATA, DATA max>
 static bool ConvertCbYCrYToRGB(const Characteristic space, const DATA *input, DATA *output, const int pixels) {

Который позже называется так:

 case kByte:
  return ConvertCbYCrYToRGB<U8, 0xFF>(space, (const U8 *)input, (U8 *)output, pixels);
 case kWord:
  return ConvertCbYCrYToRGB<U16, 0xFFFF>(space, (const U16 *)input, (U16 *)output, pixels);
 case kInt:
  return ConvertCbYCrYToRGB<U32, 0xFFFFFFFF>(space, (const U32 *)input, (U32 *)output, pixels);
 case kFloat:
  return ConvertCbYCrYToRGB<R32, FLT_MAX>(space, (const R32 *)input, (R32 *)output, pixels);
 case kDouble:
  return ConvertCbYCrYToRGB<R64, DBL_MAX>(space, (const R64 *)input, (R64 *)output, pixels);

U * и R * являются псевдонимами для беззнакового целого и типа с плавающей запятой соответственно. Что странно, так это то, что все целые числа работают отлично, а числа с плавающей точкой терпят неудачу с несколько загадочной ошибкой:

DPXColorConverter.cpp:171: error: no matching function for call to ‘ConvertCbYCrYToRGB(const dpx::Characteristic&, const dpx::R32*, dpx::R32*, const int&)’

Есть мысли?

Ответы [ 2 ]

4 голосов
/ 21 июля 2010

Вы не можете использовать числа с плавающей точкой в ​​параметрах значения шаблона.

Параметры значения шаблона должны быть целыми типами, точнее ICE: http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=/com.ibm.xlcpp8a.doc/language/ref/template_non-type_arguments.htm

2 голосов
/ 21 июля 2010

Как уже говорилось, вы не можете использовать числа с плавающей запятой в качестве параметров значения шаблона. Но в этом случае вам не нужно. Полностью избавьтесь от второго параметра, а затем в определении ConvertCbYCrYToRGB вместо использования 'max' используйте std::numeric_limits<DATA>::max(). Документация по numeric_limits находится здесь: http://www.cplusplus.com/reference/std/limits/numeric_limits/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...