Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Overloading template functions with float128_t

Boost , Math Toolkit 2.5.0 , Implementation of Float128 type

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Объект обеспечения стандартной библиотечной поддержки C++ для квадмата может потребовать включения <boost/cstdfloat.hpp> пре включение других заголовков.

Рассмотрим функцию, которая вызывает fabs(x) и ранее вводила std::fabs() в локальные рамки через , используя директиву:

template <class T>
bool unsigned_compare(T a, T b)
{
   using std::fabs;
   return fabs(a) == fabs(b);
}

В этой функции правильная перегрузка fabs может быть найдена через argument-dependent-lookup (ADL) или позвонив одному из std::fabs перегрузка. Однако между ними есть ключевое различие: перегрузка в том же пространстве имен, что и T, и обнаруженная через ADL потребность не определяется в момент объявления функции. Однако все типы, заявленные в <boost/cstdfloat.hpp>, являются фундаментальными типами, поэтому для этих типов мы полагаемся на поиск перегрузки, заявленной в области namespace std. В этом случае, однако, все такие перегрузки должны быть объявлены до определения функции unsigned_compare в противном случае они не считаются.

В случае, если <boost/cstdfloat.hpp> был включен после определение вышеуказанной функции, правильная перегрузка fabs, при наличии, просто не рассматривается как часть перегрузки. Таким образом, компилятор пытается сократить float128_t аргумент сначала на long ДП, затем на ДП, затем на float; компиляция терпит неудачу, потому что результат неоднозначный. Однако сообщение об ошибке компилятора будет выглядеть жестоко непознаваемым, по-видимому, безымянным номером строки и не упоминая float128: слово амбигуатура является ключом к тому, что неправильно.

Предоставлено вам #include <boost/cstdfloat.hpp> перед> включение любого заголовка, содержащего общий код плавающей точки (например, другой Boost). Math headers, then the compilationr will know about and use the std::fabs(std::float128_t), которые мы предоставляем в #include <boost/cstdfloatp>.


PrevUpHomeNext

Статья Overloading template functions with float128_t раздела Math Toolkit 2.5.0 Implementation of Float128 type может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Implementation of Float128 type ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 23:26:04/0.006627082824707/0