Почему это утверждение не является законным?Создание массива двоичных функций
typedef std::binary_function <double, double, bool> BF;
BF checks[] = { &less<double>, &less_equal<double> };
Почему это утверждение не является законным?Создание массива двоичных функций
typedef std::binary_function <double, double, bool> BF;
BF checks[] = { &less<double>, &less_equal<double> };
std::less
и std::less_equal
не функционирует, но функции объектов. Вам нужно создать экземпляр, например. :
std::binary_function<double, double, bool> checks[] = { less<double>() };
иметь также в виду, что std::binary_function
является устаревшим, так как C++ 11. Вместо этого вы должны использовать std::function
, например. :
std::function<bool(double, double)> checks[] = { less<double>() };
Оба less
и less_equal
один аргумент шаблона не два. Это типы не объекты, вы должны передавать объекты, посмотреть, как я использовал ()
для создания объектов из этих типов. Кроме того, для типов шаблонов вы должны использовать using
вместо typedef
.
using BF = std::binary_function <double, double, bool>;
BF checks[] = { less<double>(), less_equal<double>() };
^^ ^^
The std::binary_function
устарела, вы можете использовать вместо std::function
:
using BF = std::function <bool(double, double)>;
BF checks[] = { less<double>(), less_equal<double>() };
std::binary_function
и less<double>
все объекты. Поэтому, если вы создаете массив из std::binary_function
, вы должны хранить объекты.
less<double>
- это тип. так &less<double>
ничего не значит
Было бы неплохо опубликовать описание ошибки. –
Во-первых, возможно, потому что ['std :: less'] (http://en.cppreference.com/w/cpp/utility/functional/less) является шаблоном, который принимает только один аргумент? EDIT: Фактически, прочитав сообщение об ошибке, которое он дал вам, вы бы показали, что ... – JBL
Действительно ли оператор & требуется, поскольку std :: less - это метод шаблона? – bkausbk